mysql - mysql 24小时时间窗口中检索数据的日期条件

标签 mysql sql perl cron

我正在使用 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/

相关文章:

windows - 全新安装后LWP连接问题

perl - 代码深处使用的未声明变量的作用域是什么?

mysql - 想要从常规值中将平均值插入到仅 2008 年的平均值表中

mysql - 解决较小的特权

javascript - 如何显示来自文本区域输入的回车?

mysql - SQL。从其他列的选择中设置列值

mysql - 将 Compute Engine 上的 PHP 代码安全地连接到 Cloud SQL

mysql - Magento 让 MySQL 每天崩溃 1 到 2 次

sql - 获取每日活跃用户列表

perl - 在 perl 中自动检测控制台输出编码