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
列で、日付も含まれています (説明のために省略しました)。ジョブは 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
これはよりエレガントな方法で行うことができますか?