为了对网络服务器上的传入数据进行一些统计,我对这些数据进行了一些 ETL 工作。所以我根据一刻钟来汇总一些东西。IE:
inserted | tstamp
8:00 8:00
8:09 8:00
8:16 8:15
8:29 8:15
8:42 8:30
8:45 8:45
8:59 8:45
9:01 9:00
上面的列是datetime
列,其中还包含一个日期(我只是为了演示目的而忽略了它)。该作业通过 cron 每 3 分钟运行一次,并且仅获取最后 3 分钟的数据。现在,当 cron 作业在工作时崩溃时,存在风险,即下次重新启动作业时时隙包含错误数据。所以我希望工作从最后一个时段开始。即,当作业最后在 08:24 运行并崩溃时,它应该在 08:15 重新开始。
我现在的问题是,是否有一个简单的 MySQL 语句可以在实际时间之前给我最后一个时间段?
我在 ETL 中用来确定实际时隙的语句是
CONCAT(
DATE_FORMAT(a.inserted, '%Y-%m-%d %H:'),
IF(MINUTE(a.inserted)<15,'00',
IF(MINUTE(a.inserted)<30,'15',
IF(MINUTE(a.inserted)<45,'30',
'45'))
),
':00'
) AS tstamp
这可以以更优雅的方式完成吗?