2012-06-14 52 views
1

目標是在具有相同ID的10分鐘間隔內組合Time_a。 並分組ID。pl/sql與前一行比較

ID Time_a  ->   ID  
------------     ---------- 
1 12:10:00     1 
1 12:15:00     2 
1 12:20:00     2 
2 12:25:00 
2 12:35:00 
2 02:00:00 

因爲row5和row6之間的時間間隔大於10分鐘,所以變成了兩個'2'。 我能夠在10分鐘內完成組合,但它不區分ID。

select ID  
from(
    select id, Time_a, min(time) OVER (order by id, time rows between 1 preceding and 1 preceding) prev_t_stamp 
    from dual 
) 
where abs(Time_a-prev_t_stamp)>10/1440 
+0

什麼是time_a的數據類型? – Nick

回答

0

如果time_a是日期,那麼它的工作原理如下。如果它是一個時間戳,你需要將它投射到一個日期,否則它不會工作。這裏是我的測試腳本

drop table test; 
create table test (id number, time_a date); 
insert into test values (1, to_date('12:10','HH24:MI')); 
insert into test values (1, to_date('12:15','HH24:MI')); 
insert into test values (1, to_date('12:20','HH24:MI')); 
insert into test values (2, to_date('12:25','HH24:MI')); 
insert into test values (2, to_date('12:35','HH24:MI')); 
insert into test values (2, to_date('14:00','HH24:MI')); 

select id from (
select distinct id, case from (
select ID,case when abs(Time_a-prev_t_stamp)>10/1440 then '>' end case 
from(
    select id, Time_a, min(time_a) OVER (order by id, time_a rows between 1 preceding and 1 preceding) prev_t_stamp 
    from test 
) 
) 
) order by 1 

這導致到:

table TEST dropped. 
table TEST created. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 

ID 
-- 
1 
2 
2