2011-06-19 6 views
0

間のSQLベースの推定時間は、私は以下の表を持っている:PLタイムスタンプ

ID |  START  |  END 
A | 11/2/2011 10:00 | 13/2/11 10:00 
A | 15/2/2011 10:00 | 16/2/11 10:00 
A | 18/2/2011 10:00 | 20/2/11 10:00 
B | 11/2/2011 10:00 | 13/2/11 10:00 
C | 14/2/2011 10:00 | 17/2/11 10:00 
D | 19/2/2011 10:00 | 21/2/11 10:00 
D | 25/2/2011 10:00 | 28/2/11 10:00 

Iを推定する繰り返しのID(すなわちA、D)第一の端部と次の開始との間の期間、第二の端部のためと3回目のSTARTなど、同じIDの場合にのみ実行されます。例えば、Aのために、所望の結果である:

START2: 15/2/2011 10:00 - END1: 13/2/11 10:00 = 2 days 
START3: 18/2/2011 10:00 - END2: 16/2/11 10:00 = 2 days. 

また、繰り返しIDについて、私は(私の例では、2に等しいA用とDについて1つ)最初のイベントの数をカウントしたいです中間の繰り返しイベントのカウント(私の例では1に等しい、Aのみ)と最後のカウント。 10回出場したIDを持っていれば、最初に1回、最後に1回、中間のイベントが8回あります。

答えて

1
SELECT id, 
     start, 
     end, 
     start - lag(end) over (partition by id order by start) 
FROM your_table 

これは、用語「第1」及び「前」はstartカラム上順序によって定義されていることを前提としています。それが異なって定義されている場合、私の例ではorder by startの部分を調整する必要があります。