我有一个包含4列的表,id
,Stream
是文本,Duration
(int)和Timestamp
(datetime)。每次有人在我的网站上播放特定音频流时,都会插入一行。Stream
是名称,Duration
是他们正在收听的时间(秒)。我目前正在使用以下查询计算一年中每周的总收听时间:
SELECT YEARWEEK(`Timestamp`), (SUM(`Duration`)/60/60) FROM logs_main
WHERE `Stream`="asdf" GROUP BY YEARWEEK(`Timestamp`);
这是我所期望的。。。在有数据的一年中每周提供总的收听时间。
但是,我想建立一个查询,其中我有一个结果行数周,可能没有任何数据。例如,如果2006年第26周没有属于该周的行,那么我希望
SUM
结果为0。有可能这样做吗?也许是通过一个日期范围的连接?
最佳答案
尝试过的一个真正的老派解决方案是设置另一个表,其中包含一组日期范围,您可以将其外部加入到分组中(在另一个表中,所有的周都包含一个开始/结束日期)。
在本例中,您只需使用一个表,其中包含来自YEARWEEK的值:
201100
201101
201102
201103
201104
下面是一个sql语句的草图:
SELECT year_weeks.yearweek , (SUM(`Duration`)/60/60)
FROM year_weeks LEFT OUTER JOIN logs_main
ON year_weeks.yearweek = logs_main.YEARWEEK(`Timestamp`)
WHERE `Stream`="asdf" GROUP BY year_weeks.yearweek;