我有一個每天發送電子郵件的表格。因此,我將時間存儲爲一個時間段(00:00:00,不含日期)。幾個示例行可能是:mysql在過去一小時中選擇記錄,沒有日期
mike, timeOfDay = 07:03 meaning "send mike an email daily at 7:03AM"
corey, timeOfDay = 23:30 meaning "send corey an email daily at 11:30PM"
在任何給定的時間,我想找到從最後一小時發送的電子郵件。例如,如果我在早上7:55運行它,它應該在6:55 AM和7:55 AM之間得到所有記錄。這將包括邁克的電子郵件。如果腳本在12:15 AM(00:15)運行,它應該在11:15 PM(23:15)和12:15 AM(00:15)之間獲得所有記錄。這將包括Corey的電子郵件。
我看過everyexample在SO和網絡,他們似乎都需要一個日期除了小時。
儘可能靠近我可以來:
SELECT
`notification`. *,
now() as now,
DATE_SUB(NOW() , INTERVAL 1 HOUR) as 1hourAgo
FROM `notification`
WHERE (
`notification`.`timeofday` > DATE_SUB(NOW() , INTERVAL 1 HOUR)
)
AND (
`notification`.`timeofday` < NOW()
)
我想出了一個黑客現在纔來匹配這個時候和最後的時間,但現在看來,好,hackish的。必須有一個正確的方法來做到這一點!
這是我得到的黑客。
SELECT
`notification`. * ,
HOUR(NOW()) AS HOUR ,
HOUR(DATE_SUB(NOW() ,
INTERVAL 1 HOUR)) AS 1hourago,
time(now()) AS now
FROM `notification`
WHERE (
HOUR(`notification`.`timeofday`) = HOUR(NOW())
OR HOUR(`notification`.`timeofday`) = HOUR(DATE_SUB(NOW() , INTERVAL 1 HOUR))
)
AND (
`notification`.`timeofday` < TIME(NOW())
)
感謝您的幫助!
謝謝!我的挑戰是如何在不提供時間的情況下運行這種查詢。我不想弄清楚如果時間超過24:00我必須包含一個OR。 – Corey
@Corey我已經用更高級的查詢更新了我的答案,它應該可以做你正在問的問題。 – Bart
@Corey:另一個更新。這一次它是在你的數據庫中量身定做的,所以如果我沒有弄錯,你可以使用當前的查詢「按原樣」。 – Bart