我有以下代码,该代码以周为单位对某些事件(YYYY-MM-DD HH:MM:SS)进行分组,例如显示为“ Y:2010-Week:50”。
SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(*) as number
效果很好,但即使没有任何活动,我也想整周返回。
如果在第三周未注册任何事件,此刻我会得到:
week 1: 10 week 2: 1 week 4: 2
我想得到:
week 1: 10 week 2: 1 week 3: 0 week 4: 2
SQL无法返回某些表中不存在的行。为了获得想要的效果,您将需要一个表Weeks(WeekNo INT),该表在一年中的每个可能的星期(IIRC是53或54个可能的星期,具体取决于您的计算方式)中都有一行。
然后,将此表与OUTER JOIN联接到您的常规结果中,以增加额外的几周时间。
SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(date) as number FROM YourTable RIGHT OUTER JOIN Weeks ON WEEK(YourTable.date) = Weeks.WeekNo
[更新]:请注意使用COUNT(日期)的用户,而不是COUNT(*)。累加COUNT时,SQL不会在日期列中包含NULL值。由于缺少的星期没有日期,因此正确地为您提供了那几周的0个事件。