1

目標は、同じ ID を持つ Time_a を 10 分間隔で結合することです。そしてIDをグループ化します。

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

行 5 と行 6 の間の時間間隔が 10 分を超えているため、2 '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
4

1 に答える 1

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 
于 2012-08-01T08:24:49.560 に答える