我有一个每天发送电子邮件的表格。因此,我将时间存储为一个时间段(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