我正在使用 perl 和 DBI 来查询 mysql 表。我需要检索过去 24 小时内的所有行(来自 3 个独立数据库的大约 75,000 行),最好是在上午 12:00 到晚上 11:59 或 00:00:00 到 23:59:59 之间。
我使用的是这样的 WHERE
日期条件:
SELECT *
FROM table_name
WHERE insert_date >= DATE_SUB(NOW(), INTERVAL 1 DAY);
然后我会在午夜使用 cron 运行我的脚本。这工作得很好,但由于午夜经常出现大量流量以及查询的大小,用 cron 安排的执行时间现在是凌晨 3:00。我更改了我的 sql,尝试从这样的偏移量获取相同的 24 小时周期:
SELECT *
FROM table_name
WHERE insert_date
BETWEEN DATE_SUB(DATE_SUB(NOW(), INTERVAL 3 HOUR), INTERVAL 1 DAY)
AND DATE_SUB(NOW(), INTERVAL 3 HOUR);
这似乎对我的目的工作正常,但我想问,是否有一种更可读、更准确的方法,使用 mysql 来获取过去 24 小时(00:00:00 到 23 之间)的所有行: 59:59 时间窗口)每天一次,同时从偏移时间运行查询?我对这一切都很陌生,所以对我的整体方法的任何批评都是非常受欢迎的。
最佳答案
我认为insert_date
是一个DATETIME
?
费尽心思构建两个限制并使用 BETWEEN
似乎毫无意义。我只需检查 DATE(insert_date)
是否是昨天的日期。所以
WHERE DATE(insert_date) = CURDATE() - INTERVAL 1 DAY
关于mysql - mysql 24小时时间窗口中检索数据的日期条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159810/