有没有办法使用mysql从过去一周获得所有日期,即使它们不包含任何记录?
现在我的查询看起来像这样(对于可以监控工作时间的应用程序等):
SELECT user_id, SUM( TIME_TO_SEC( checkout_time ) - TIME_TO_SEC( checkin_time ) ) AS total_time, DATE( checkout_time ) AS checkout_day
FROM timetable
WHERE task_id = 19
AND checkout_time >= ( DATE_SUB( CURDATE( ) , INTERVAL 1 WEEK ) )
GROUP BY checkout_day, user_id
ORDER BY checkout_day ASC
这非常有效,但我“只”获取用户实际上已经计入的日期(这真的是重要的日子)。但是,如果有一种方法可以在一周的间隔内获得所有日期,那将会是多么的好。如果像:
DATE(INTERVAL 1 WEEK) as dates
会检索:
|dates
------------
|2012-07-15
|2012-07-16
|2012-07-17
|2012-07-18
|2012-07-19
|2012-07-20
可能不是你通常使用SQL的东西,但是如果有人知道某种方式 - 你会想到我的一天。
答案 0 :(得分:1)
您可以在7天内使用静态UNION,并将其余部分留给他们
SELECT
user_id,
COALESCE(SUM( TIME_TO_SEC( checkout_time ) - TIME_TO_SEC( checkin_time ) ), 0) AS total_time,
week.day AS checkout_day
FROM (
SELECT CURDATE() AS day
UNION SELECT CURDATE() - INTERVAL 1 DAY
UNION SELECT CURDATE() - INTERVAL 2 DAY
UNION SELECT CURDATE() - INTERVAL 3 DAY
UNION SELECT CURDATE() - INTERVAL 4 DAY
UNION SELECT CURDATE() - INTERVAL 5 DAY
UNION SELECT CURDATE() - INTERVAL 6 DAY
) AS week
LEFT JOIN timetable ON (task_id = 19 AND DATE(week.checkout_time) = week.day)
GROUP BY week.day, user_id
备注强>
ON
部分,或者您希望看到没有时间表数据的行。GROUP BY
中的字段ORDER BY
如果您没有为其他人编写语法答案 1 :(得分:0)
由于您的日期是一周,您可以将它们转换为一年中的第n周进行比较。
WHERE YEARWEEK(checkout_time) = YEARWEEK(DATE_SUB( CURDATE() ,INTERVAL 7 DAY))