为了对web服务器上的传入数据做一些统计,我对这些数据做了一些ETL工作。所以我总结了一些基于四分之一小时的事情。即:计算时间(到下一个时间段的整数时间)
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
列,其中还包含一个日期(我离开它仅用于演示目的)。该作业每3分钟通过cron运行一次,并且只接收最近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
难道这更优雅的方式做?
您的查询隐含你的'real_time'列不是日期。是吗? – Ben
对不起,这只是时间片的一个例子。当然,这是一个包含日期的'datetime'列。 – rabudde