显示日期之间的星期

时间:2012-01-16 10:39:14

标签: mysql sql

我正在使用以下查询来获取每周花费的时间总和

SELECT SUM( hours ) AS total, 
CONCAT( spent_on,  ' - ', spent_on + INTERVAL 6 DAY ) AS weeky
FROM time_entries
WHERE project_id =1
GROUP BY WEEK( spent_on )

我当前的输出是

20  2011-04-28 - 2011-05-04
18  2011-06-11 - 2011-06-17
17  2011-06-13 - 2011-06-19
26  2011-06-20 - 2011-06-26

但我也希望显示那些不在时间条目中的周。

即我希望显示从给定日期到日期的所有周。

预期产出

20  2011-04-28 - 2011-05-04
0       2011-05-05 - 2011-05-11
0       2011-05-12 - 2011-05-18
.
.
.
18  2011-06-11 - 2011-06-17
17  2011-06-13 - 2011-06-19
26  2011-06-20 - 2011-06-26

如果不是日期,则应显示第1周,第2周,第3周......第n周

即使是表格中没有工作条目的那几周

1 个答案:

答案 0 :(得分:1)

然后你需要一个查找表。一个是您感兴趣的每周开始日期。使用该表,您可以左键加入您的数据,然后开始工作:)

SELECT
  SUM( time_entries.hours ) AS total, 
  CONCAT( calendar.first_date,  ' - ', calendar.last_day ) AS weekly
FROM
  calendar
LEFT JOIN
  time_entries
    ON  calendar.first_day <= time_entries.spent_on
    AND calendar.last_day  >= time_entries.spent_on
    AND time_entries.project_id =1
GROUP BY
  calendar.first_day

虽然拥有该查找表我感觉有些不整洁,但它几乎不占用任何空间,创建和填充时间不长,并且实际上是一个缓存(使用磁盘空间来节省CPU时间和查询复杂性)