我正在使用以下查询来获取每周花费的时间总和
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周
即使是表格中没有工作条目的那几周
答案 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时间和查询复杂性)