【发布时间】:2014-12-01 13:01:26
【问题描述】:
我正在尝试创建一个查询,该查询按日期和小时提供ids 的细分,其中空白结果显示为零。
到目前为止,这是 MYSQL 查询:
SELECT DATE(received),
CONCAT(hourly.hour, ':00 - ', hourly.hour+1, ':00') AS Hours,
COALESCE(COUNT(id),0) AS "Leads"
FROM hourly
LEFT JOIN digital_lead ON hourly.hour=hour(digital_lead.received)
WHERE
digital_lead.received>=DATE_SUB('2014-11-01', INTERVAL 24 HOUR) AND
digital_lead.received<=DATE_SUB('2014-11-26', INTERVAL 24 HOUR)
GROUP BY DATE(received), hourly.hour
ORDER BY DATE(received)
我有一个从 0 到 23 的整数表,组成了 hourly 表。
目前,此查询仅显示结果存在的时间段 - 如下所示:
DATE(received) Hours Leads
2014-11-12 11:00 - 12:00 23
2014-11-12 12:00 - 13:00 19
2014-11-12 13:00 - 14:00 18
2014-11-12 14:00 - 15:00 17
2014-11-12 15:00 - 16:00 23
2014-11-12 16:00 - 17:00 13
2014-11-12 17:00 - 18:00 17
查询应该显示来自00:00 - 11:00 的时间段的零结果,而不是在查询结果中遗漏它们。它似乎忽略了COALESCE 函数,我尝试用IFNULL(COUNT(id), 0) 替换它,没有区别。
我已经尝试了这个问题/答案中的解决方案 - STACKOVERFLOW LINK
但是,这对我不起作用。
有什么建议吗?
编辑
这里是 SQL FIDDLE 了解更多详情
【问题讨论】:
-
左连接与 where 使其成为内连接。您可以移动 where 条件作为加入条件。
-
@AbhikChakraborty - 你能举个例子吗?谢谢
-
LEFT JOIN digital_lead ON hourly.hour=hour(digital_lead.received) and digital_lead.received>=DATE_SUB('2014-11-01', INTERVAL 24 HOUR) and digital_lead.received<=DATE_SUB('2014-11-26', INTERVAL 24 HOUR)也删除了where子句 -
@AbhikChakraborty - 删除
WHERE子句并替换为您建议的语句会产生相同的结果。还有什么建议吗? -
hmm 你能用一些示例数据创建一个 sqlfiddle 以便我们看看吗?