2017-08-31 5 views
1

を数えるの違いは、私は以下のデータは、イベント、IDが発注し、その後のstart_timeている:SQL:時間と周波数

EVENT ID START_TIME END_TIME 
1  101  1:00  2:00 
1  101  3:00  3:30 
1  102  1:00  4:00 
1  102  5:00  6:00 
2  103  10:00  11:00 
2  103  12:00  13:00 
2  103  13:30  14:00 
2  103  14:30  15:00 

そして、私は次のように終わるしたい:

Difference_hour Frequency 
1     3 
0,5    2 

私はIDのEND_TIMEと同じEVENT内の同じIDのSTART_TIMEとの違いを調べるクエリを取得したいと思います(具体的に言えば、同じSTART_TIMEとEND_TIMEの違いには興味がありません行)。

例:イベント1ではID 101が必要です。最初のEND_TIME(2:00)と2番目の行3:00の次のSTART_TIMEの間に違いがあります。差は1時間です。これをID 102と同様に行うと、1時間の別の差異が生じます。

最後に、2番目の表に示すように、それぞれの違いの頻度を数えたいと思います。

答えて

0
select diff_hour, count(*) 
from 
    (
    select (next_start - end_time)*86400 as diff_hour 
    from 
    (
    select end_time, lead(start_time) over (partition by event, id order by start_time) next_start 
    from MyTable 
    ) x1 
    where next_start is not null 
) x2 
group by diff_hour 
+0

こんにちはJohnさん、すばやく返信いただきありがとうございます。それはうまくいくように思えます、私は日付を含む別の時間を持っているだけです、そして、私はそれが正しい時間を示していないことを期待しています。日付を含む時刻は、次のように表示されます:<2016-12-31 21:09:55>。この日付でどのようにクエリが表示されますか? 例:END_TIME <2016-12-31 21:09:55>およびSTART_TIME <2016-12-31 21:13:02>次に、時間差を0.0519444444時間にしたいと考えています。前もって感謝します! – Younes

+0

@Younes Oracleには「時間」タイプはなく、日付のみを使用します。 HH:MMで表示するには、テキストに変換する必要があります。 – JohnHC

+0

こんにちはジョン、私はそれを働かせました、あなたの素早いヘルプのためにもう一度、ありがとう! – Younes

関連する問題