SELECT DATE(login) AS loginDate, COALESCE(COUNT(login),0) AS loginCount
FROM LMS_LoginTracking
WHERE prism_mem_id = 55308
AND DATE(login) BETWEEN '2017-01-04T18:30:00.000Z' AND '2017-01-09T18:30:00.000Z'
GROUP BY DATE(login)
输出是:
LoginDate LoginCount
2017-01-05 406
2017-01-06 558
2017-01-08 11
2017-01-09 406
在这里,我期待2017-01-07应该是0,因为这个日期在数据中不可用,即使我需要将该特定日期的结果作为零结果。
必需的输出:
LoginDate LoginCount
2017-01-05 406
2017-01-06 558
2017-01-07 0
2017-01-08 11
2017-01-09 406
请帮我解决这个问题。
答案 0 :(得分:2)
有许多不同的方法可以实现这一目标。我所知道的最简单的方法是创建一个存储感兴趣日期的表。然后用相关数据填写。我们称之为work_days
CREATE TABLE work_days(
work_day date NOT NULL PRIMARY KEY
);
然后您可以使用左连接,如下所示
SELECT date(login) as loginDate, COALESCE(count(login),0) as loginCount
FROM work_dates LEFT JOIN LMS_LoginTracking
ON work_dates.work_day = date(LMS_LoginTracking.login) /* edit as appropriate */
WHERE prism_mem_id=55308 AND DATE(login) BETWEEN '2017-01-04T18:30:00.000Z' AND '2017-01-09T18:30:00.000Z' group by date(login)
您还没有张贴您的牌桌,因此无法在此进行测试。因此,此查询可能无法以其确切的形式运行。请根据需要进行编辑