2016-01-07 32 views
0

我想從我的mysql表中每小時計算最近12小時內的記錄。在mysql中以小時爲單位計算過去12小時內的所有記錄

我發現這個link但我的問題是,比如說現在是2016年1月7日,上午9點,然後我想要記錄從1月7日上午9點到1月6日9點的記錄。 我的表結構如下:

 
Table name :: cebod_cdr 

id|userid|starting_date|total_duration 
1 | 17 | 2016-01-07 09:00:00 | 12 
2 | 17 | 2016-01-07 07:30:24 | 45 
3 | 17 | 2016-01-07 01:12:21 | 5 
4 | 17 | 2016-01-06 10:30:00 | 18 
5 | 17 | 2016-01-06 10:45:00 | 25 

實施例輸出

 
hour | calls 
9AM | 1 
8AM | 0 
7AM | 1 
6AM | 0 
5AM | 0 
4AM | 0 
3AM | 0 
2AM | 0 
1AM | 1 
12AM | 0 
11PM | 0 
10PM | 2 

如果在期望的格式(1-12)中,i可以像其他一些格式顯示它顯示小時的任何問題24小時格式等

+0

以下答案中的兩個查詢都會爲您提供結果。如果你想每小時運行一次這個查詢 - 你應該設置一個cron作業。 – CreativeMind

+0

沒有。只有有數據時才顯示記錄,即使在過去12小時內沒有記錄時也要顯示結果 – Raakesh

回答

1
SELECT HOUR(starting_date) AS Hour, COUNT(*) AS calls 
FROM cebod_cdr 
WHERE starting_date > DATE_ADD(NOW(), INTERVAL -12 HOUR) 
GROUP BY HOUR(starting_date) 
1

嘗試這種情況:

SELECT 
    date_format(dh.starting_date, '%Y-%m-%d %H:%i:%s') as hour, 
    COUNT(md.id) AS count 
FROM 
    cebod_cdr dh 
    LEFT JOIN cebod_cdr md ON dh.starting_date = DATE_FORMAT(md.starting_date, '%Y-%m-%d %H:00:00') 
WHERE dh.starting_date >= DATE_SUB(NOW(),INTERVAL 12 HOUR) 
    AND dh.starting_date < NOW() 
GROUP BY dh.starting_date 
ORDER BY dh.starting_date 
+0

僅在有數據時顯示記錄,即使沒有記錄時也要顯示結果在過去的12個小時內。 – Raakesh

+0

那麼,這完全改變了查詢的一些部分:)我會編輯它 – HerpaMoTeH

0

我已經找到了答案如下:

 
    SELECT za_hours.za_hour as hour, COUNT(id) as calls 
    FROM ( 
    SELECT NOW() - INTERVAL 1 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 2 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 3 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 4 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 5 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 6 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 7 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 8 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 9 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 10 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 11 HOUR as za_hour UNION 
    SELECT NOW() - INTERVAL 12 HOUR as za_hour) 
    za_hours 
    LEFT JOIN 
    cebod_cdr 
    ON DATE_FORMAT(za_hours.za_hour, '%Y-%m-%d %H:') = DATE_FORMAT(starting_date, '%Y-%m-%d %H:') 
    AND starting_date >= NOW() - INTERVAL 12 HOUR 
    GROUP BY za_hours.za_hour 
    ORDER BY za_hours.za_hour 

請建議,如果我能改善這個查詢。

相關問題