2017-08-31 88 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)和第二行3:00之後的START_TIME之間有所區別。差別是1小時。如果我們爲ID 102做類似的事情,我們最終會得到另一個1小時的差異。

最後,我想統計每個差異的頻率,這可以在第二個表格中看到。

回答

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