MySQL を使用して、特定のコードの過去 30 分以内の 5 分間に 4 つのエントリがあったかどうかを調べたいと考えています。
name stamp code
a 2013-02-03 13:12:01 red
b 2013-02-03 13:23:01 red
c 2013-02-03 13:23:11 red
d 2013-02-03 13:24:01 green
e 2013-02-03 13:24:05 red
f 2013-02-03 13:24:21 red
g 2013-02-03 13:25:01 red
h 2013-02-03 13:48:01 red
したがって、2013-02-03 13:50:00 にクエリを実行すると、過去 30 分間に 5 分間のブロック内に 4 つ以上のエントリのグループがあったエントリの数が返されます最初に一致したエントリのスタンプ。ただし、コードレッドのエントリのみ。
このサンプル テーブルを使用した結果は次のようになります: 5, 2013-02-03 13:23:01
単一のクエリで可能ですか? ありがとう!
編集: このクエリに問題はありますか?
SELECT COUNT(*), rolling.stamp
FROM mytable thisrow JOIN mytable rolling
ON (thisrow.stamp BETWEEN rolling.stamp AND
rolling.stamp + INTERVAL 5 MINUTE)
WHERE rolling.stamp >= DATE_SUB(NOW(), INTERVAL 30 MINUTE)
AND code = 'red'
GROUP BY 2 HAVING COUNT(*) >= 4
上記のテーブルに対して実行すると、目的の「5、2013-02-03 13:23:01」が得られます。
PS I は、この例の now() を '2013-02-03 13:50:00' に置き換えました