2016-04-25 9 views
1

とSELECT列私はお互いに近づけることができる時間のイベントを記述したテーブルSQL:少しの時間差

event_id eventtypeid eventtimestamp

を持っています。私はイベントのペアを見つけたいと思っています。ここでは、イベントタイプは等しく、タイムスタンプの違いは3ミリ秒よりも長くありません。

一般的にsqlでは可能ですか?どのように私はそのような要求を公式化することができますか?

ありがとうございます。これらのような

+0

ご使用のデータベースに質問にタグを付けてください。 –

+0

2つの「一致」がある行が各側に1つある場合は、何をしたいですか?それはペアの2つのセットか1つのトリプレットですか? –

+0

@Tom H、チップレットは不可能です:)またはそれらが発生した場合、私はお互いにペアで壊れたこのすべてのイベントに満足できます – user2957954

答えて

3
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' 
3

クエリは、一般的に最高の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'; 

これは通常、自己結合よりもはるかに高速です。