![](/img/trans.png)
[英]MySQL, Coldfusion, Selecting records that were timestamped in the last 24 hours
[英]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.