私はTomH.の優れたアイデアを使用していますが、ここでは少し異なる方法で使用しています:
チェーンの始まりであるすべての行を見つける代わりに、すべての回を見つけることができます それがチェーンの始まりです。次に戻って、時間に一致する行を見つけます。
ここでのクエリ#1は、どの時刻がチェーンの始まりであるかを、その下に3秒以内にある時刻がないことを見つけることによって示す必要があります。
SELECT DISTINCT Timestamp
FROM Table a
LEFT JOIN Table b
ON (b.Timestamp >= a.TimeStamp - INTERVAL 3 SECONDS
AND b.Timestamp < a.Timestamp)
WHERE b.Timestamp IS NULL
次に、各行について、クエリ#2のタイムスタンプよりも小さい最大のチェーン開始タイムスタンプを見つけることができます:
SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartofChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id
それができたら、必要に応じてグループ化できます。
SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime
トムHさんの回答とは別に投稿するほど明確かどうかはわかりませんが、実装に問題があるようで、考えていたので、また投稿したいと思いました。頑張ってください!