2011-04-14 59 views
3

我已經在各行ID和DT_EVENT記錄一個事件日誌表,即時間間隔:SQL - 組由ID和可變的起點

ID  DT_EVENT 
------------------------- 
1  14-MAR-11 00:00:01 
2  14-MAR-11 00:02:00 
3  14-MAR-11 00:05:01 
1  14-MAR-11 00:08:01 
3  14-MAR-11 00:22:00 
1  14-MAR-11 15:00:01 
1  14-MAR-11 15:15:01 

我需要通過組ID和一個+例如,從ID的第一個事件開始的20分鐘的時間間隔。就像:

EV_GROUP ID  DT_FIRST_EVENT  DT_LAST_EVENT   N_EVENTS 
----------------------------------------------------------------------- 
1   1  14-MAR-11 00:00:01 14-MAR-11 00:08:01  2 
2   2  14-MAR-11 00:02:00 14-MAR-11 00:02:00  1 
3   3  14-MAR-11 00:05:01 14-MAR-11 00:22:00  2 
4   1  14-MAR-11 15:00:01 14-MAR-11 15:15:01  2 

我不知道如何設置該dt時間間隔的組子句。任何想法呢?

TNX提前, 加布裏埃萊

回答

3
SELECT id, diff, MIN(dt_event), MAX(dt_event) 
FROM (
     SELECT t.*, 
       TRUNC((dt_event - FIRST_VALUE(dt_event) OVER (PARTITION BY id ORDER BY dt_event)) * 86400/1200) AS diff 
     FROM mytable t 
     ) 
GROUP BY 
     id, diff 
+0

看來工作太棒了!但是,究竟什麼'差異'站起來?我不知道爲什麼它在最前面的查詢的group by子句中... – 2011-04-14 12:15:51

+0

@TheClue:'diff'是最內層查詢中的表達式的別名,它從頭開始計算20分鐘的時間間隔。 – Quassnoi 2011-04-14 12:21:48

+0

tnx的答案和解釋,它的作品就像一個魅力! – 2011-04-14 13:29:30