とSELECT列私はお互いに近づけることができる時間のイベントを記述したテーブルSQL:少しの時間差
event_id eventtypeid eventtimestamp
を持っています。私はイベントのペアを見つけたいと思っています。ここでは、イベントタイプは等しく、タイムスタンプの違いは3ミリ秒よりも長くありません。
一般的にsqlでは可能ですか?どのように私はそのような要求を公式化することができますか?
ありがとうございます。これらのような
とSELECT列私はお互いに近づけることができる時間のイベントを記述したテーブルSQL:少しの時間差
event_id eventtypeid eventtimestamp
を持っています。私はイベントのペアを見つけたいと思っています。ここでは、イベントタイプは等しく、タイムスタンプの違いは3ミリ秒よりも長くありません。
一般的にsqlでは可能ですか?どのように私はそのような要求を公式化することができますか?
ありがとうございます。これらのような
SELECT
*
FROM
event_table AS first
INNER JOIN
event_table AS second
ON second.eventtypeid = first.eventtypeid
AND second.eventtimestamp > first.eventtimestamp
AND second.eventtimestamp <= first.eventtimestamp + INTERVAL '3 milliseconds'
クエリは、一般的に最高のwindow functionで解決されています
SELECT eventtypeid, first, second, diff
FROM (
SELECT eventtypeid, event_id AS first, lead(event_id) OVER w AS second,
lead(eventtimestamp) OVER w - eventtimestamp AS diff
FROM event_table
WINDOW w AS (PARTITION BY eventtypeid ORDER BY eventtimestamp)
) sub
WHERE diff <= interval '3 milliseconds';
これは通常、自己結合よりもはるかに高速です。
ご使用のデータベースに質問にタグを付けてください。 –
2つの「一致」がある行が各側に1つある場合は、何をしたいですか?それはペアの2つのセットか1つのトリプレットですか? –
@Tom H、チップレットは不可能です:)またはそれらが発生した場合、私はお互いにペアで壊れたこのすべてのイベントに満足できます – user2957954