簡體   English   中英

MySQL:過去24小時內按小時插入的記錄

[英]MySQL: Records inserted by hour, for the last 24 hours

我正在嘗試列出過去24小時內插入數據庫的每小時記錄數。 每行顯示當前插入的記錄,以及它之前的小時數。

這是我的查詢:

SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY time ASC

現在它返回:

28  23
62  23
14  20
1    4
28  3
19  1

這顯示了23小時前的兩行,當時它應該只顯示每小時一行。 我認為它與使用NOW()而不是在一小時的開始時間有關,我不確定如何獲得。

必須有一種更簡單的方法。

如果按HOUR(time)分組,則應在選擇表達式中使用HOUR(time) ,而不是time 例如:

SELECT HOUR(time), COUNT(*)
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY HOUR(time)

或者,您可以按要返回的表達式進行分組:

SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
ORDER BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )

如果你想知道,在這樣的同一個查詢中多次調用NOW()是安全的。 手冊

返回當前日期或時間的函數在查詢執行開始時每個查詢僅評估一次。 這意味着在單個查詢中對諸如NOW()之類的函數的多次引用總是產生相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM