【发布时间】:2013-11-26 19:47:34
【问题描述】:
我正在尝试编写一个查询来检索多个用户在一个日期范围内的时间信息。
我的表设置如下:
条目:
user_id | entry_date | entry_hours
1 | 2013-11-12 | 4
1 | 2013-11-12 | 5
1 | 2013-11-13 | 3
2 | 2013-11-13 | 7
....
日历:
calendar_date
.....
2013-11-10
2013-11-11
2013-11-12
2013-11-13
2013-11-14
.....
如果我运行这个查询:
SELECT *, e.user_id, e.entry_date, COALESCE(SUM(e.entry_hours), 0) as total
FROM `entry` e
WHERE entry_date BETWEEN '2013-11-12' and '2013-11-13'
GROUP BY e.user_id, e.entry_date
我得到了一些效果
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-13 | 7
当我想要这个时:
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-12 | 0
2 | 2013-11-13 | 7
它用 0 填充缺失的日期。
编辑:当他们没有列出的条目时,我还需要它以 0 的形式拉入 user_id。假设我在那里包含WHERE 子句AND user_id IN (1,2,3),我会得到类似的东西:
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-12 | 0
2 | 2013-11-13 | 7
3 | 2013-11-12 | 0
3 | 2013-11-13 | 0
日历表背后的想法是能够提取一个范围内的所有日期并将它们与条目表连接以填充那些缺失的日期,但我一直无法弄清楚如何做到这一点。
谁能指出我正确的方向?
【问题讨论】:
标签: mysql sql gaps-and-islands