[英]Create a by Date and hour breakdown from TIMESTAMP field MYSQL
我正在嘗試創建一個查詢,該查詢按日期和小時提供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)
我有一個組成hourly
表的從0到23的整數表。
目前,此查詢僅顯示結果存在的時隙-像這樣:
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,以獲取更多詳細信息
好的,這花了一些時間。 這是我最好的想法。 也許有更好的方法,但是加入時丟失的日期或時間總是很復雜。 我沒有給出與失蹤日期有關的答案 ,但這是完全不同的。
因此,使用相同的想法,我在查詢中做了一些更改以檢索數據,如下所示
select
t1.date_received,
t1.Hours,
COALESCE(t2.`Leads`,0) as `Leads`
from
(
select
distinct DATE(received) as date_received,
concat (DATE(received),'-',h.hour) as date_hour,
CONCAT(h.hour, ':00 - ', h.hour+1, ':00') AS Hours
from digital_lead
cross join (select hour from hourly)h
)t1
left join
(
SELECT DATE(received) as date_received,
concat (DATE(received),'-',hour) as date_hour,
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)
and 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
)t2
on t1.date_hour = t2.date_hour
order by t1.date_received,
cast(substring_index(t1.Hours,':',1) as unsigned)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.