我正在疯狂地完成应该做的简单查询。我有下表:
每日签到表:tbl_checkin(唯一,用户ID,时钟)
样本数据:
1 1 7/25/2014 12:00:00 AM
2 1 7/25/2014 2:37:05 PM
3 2 7/25/2014 3:22:29 PM
日历表:日历(日期字段)
样本数据包含从2012年到2050年的日期(例如,2012年1月1日上午12:00:00,等等。)
我希望得到这个结果:
Date: Count:
Jul 21 0
Jul 22 0
Jul 23 0
Jul 24 0
Jul 25 3
Jul 26 0
Jul 27 0
Jul 28 0
我的查询指定了日期范围。在上面的示例中,我指定了1周,但可以指定任何日期范围。我与查询最接近的是:
SELECT
date_format(calendar.datefield, '%b %e') AS clockdate,
COUNT(*) AS total
FROM tbl_checkin RIGHT JOIN calendar ON (DATE(tbl_checkin.clock) = calendar.datefield)
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE('2014-07-21')) FROM tbl_checkin)
AND (SELECT MAX(DATE('2014-07-28')) FROM tbl_checkin))
GROUP BY clockdate;
我得到的结果是这样的:
Date: Count:
Jul 21 1
Jul 22 1
Jul 23 1
Jul 24 1
Jul 25 3
Jul 26 1
Jul 27 1
Jul 28 1
由于某种原因,我一无所有的日期得到1。一个用户在一天内可能有多个条目。有人看到我在做什么错吗?非常感谢。
当count(*)
使用时,行,其中tbl_checkin.clock is null
也算作1(因为right join
)。我们只需要替换count(*)
为count(tbl_checkin.clock)
:
SELECT
date_format(calendar.datefield, '%b %e') AS clockdate,
COUNT(tbl_checkin.clock) AS total
FROM tbl_checkin
RIGHT JOIN calendar ON DATE(tbl_checkin.clock) = calendar.datefield
WHERE calendar.datefield BETWEEN '2014-07-21' AND '2014-07-28'
GROUP BY clockdate;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句