2017-07-11 17 views
0

我有一個查詢,看起來像這樣:查找小時,日,周和月1小時時間戳和羣體之間的差距 - MySQL的

SELECT count(*), date_format(created, '%H:%i - %d/%m/%y') as 
datecreated 
FROM mimesi_realtime.served_clips 
where created > NOW() - INTERVAL 48 HOUR 
group by date_format(created, '%H - %d/%m/%y') 
order by min(created) ASC; 

,它基本上是一個計數每隔一小時,在過去48小時,它排序按時間順序結果

的問題是,在夜間,特別是22:00和5:00之間沒有數據被註冊,我需要顯示0計數爲每小時反正

count(*) is in左欄
創建是正確的

一)實際結果:

- 261, 20:00 - 11/04/17 
- 133, 21:00 - 11/04/17 
- 208, 22:00 - 11/04/17 
- 358, 5:00 - 12/04/17 
- 489, 6:00 - 12/04/17 

B)預期的結果:

- 261, 20:00 - 11/04/17 
- 133, 21:00 - 11/04/17 
- 208, 22:00 - 11/04/17 
- 0, 23:00 - 11/04/17 
- 0, 24:00 - 11/04/17 
- 0, 1:00 - 12/04/17 
- 0, 2:00 - 12/04/17 
- 0, 3:00 - 12/04/17 
- 0, 4:00 - 12/04/17 
- 358, 5:00 - 12/04/17 
- 489, 6:00 - 12/04/17 

是否有關於我怎麼能做到這一點任何方式?

+0

如果你選擇了一些東西,那麼通常你必須按同樣的東西來分組。如需進一步的幫助,請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple -sql-query – Strawberry

+0

昨天我們解決了這個問題,不是嗎? https://stackoverflow.com/questions/45011431/find-missing-date-and-add-them-into-result-mysql –

+0

@EstebanP。我們只做了幾天和幾個月。但我試圖做幾個小時和幾周,但它不起作用 – GPecchio

回答

1

對於您的問題通常的解決方案是創建一個日曆表包含您想要在您的報告中顯示的所有時間戳。如果你不能創建表格,那麼你可以使用內聯方法,例如

(
    SELECT '2017-11-07 00:00:00' AS ts UNION ALL 
    SELECT '2017-11-07 01:00:00'  UNION ALL 
    ... 
    SELECT '2017-11-07 23:00:00' 
) t 

然後左加入日曆表當前表,做一個類似的查詢:

SELECT 
    COUNT(t2.created), 
    DATE_FORMAT(t1.ts, '%H - %d/%m/%y') AS datecreated 
FROM calendar t1 -- possibly replace with inline table 
LEFT JOIN mimesi_realtime.served_clips t2 
    ON DATE_FORMAT(t1.ts, '%H - %d/%m/%y') = DATE_FORMAT(t2.created, '%H - %d/%m/%y') 
WHERE t1.ts > NOW() - INTERVAL 48 HOUR 
GROUP BY DATE_FORMAT(t1.ts, '%H - %d/%m/%y') 
ORDER BY MIN(t1.ts) 

如果你不想用日曆表工作,那麼另一個選擇是有計劃過程每小時寫一個虛擬記錄。這將保證每個時間點都出現在您的表格中。它有一些浪費空間的缺點以及設置它的時間。

+0

是的,我想過,但問題是,我不能修改數據庫,但我只能運行查詢 – GPecchio

+0

@GPecchio沒有問題。您可以使用內聯日曆表,然後您的代碼將在感興趣的時段生成該表。 –

+0

內聯表可以是動態的,因爲我需要過去48小時的數據? – GPecchio

相關問題