我有下表
uid rid time_type date_time
a11 1 1 5/4/2013 00:32:00 (row1)
a43 2 1 5/4/2013 00:32:01 (row2)
a68 2 2 5/4/2013 00:32:02 (row3)
a98 2 1 5/4/2013 00:32:03 (row4)
a45 2 1 5/4/2013 00:32:04 (row5)
a94 1 2 5/4/2013 00:32:05 (row6)
a35 2 2 5/4/2013 00:32:07 (row7)
a33 2 2 5/4/2013 00:32:08 (row8)
我可以使用普通的选择查询来提取数据,使其成为
uid rid time_type date_time
a11 1 1 5/4/2013 00:32:00 (row1)
a94 1 2 5/4/2013 00:32:05 (row6)
a43 2 1 5/4/2013 00:32:01 (row2)
a68 2 2 5/4/2013 00:32:02 (row3)
a98 2 1 5/4/2013 00:32:03 (row4)
a35 2 2 5/4/2013 00:32:07 (row7)
a45 2 1 5/4/2013 00:32:04 (row5)
a33 2 2 5/4/2013 00:32:08 (row8)
逻辑是time_type为1需要与相同rid的下一个对应time_type 2配对。可以这样做吗?
答案 0 :(得分:2)
您可以尝试这种方法:
-- sample of data from the question
SQL> with t1(uid1, rid, time_type, date_time) as
2 (
3 select 'a11', 1, 1, '5/4/2013 00:32:00' from dual union all
4 select 'a43', 2, 1, '5/4/2013 00:32:01' from dual union all
5 select 'a68', 2, 2, '5/4/2013 00:32:02' from dual union all
6 select 'a98', 2, 1, '5/4/2013 00:32:03' from dual union all
7 select 'a45', 2, 1, '5/4/2013 00:32:04' from dual union all
8 select 'a94', 1, 2, '5/4/2013 00:32:05' from dual union all
9 select 'a35', 2, 2, '5/4/2013 00:32:07' from dual union all
10 select 'a33', 2, 2, '5/4/2013 00:32:08' from dual
11 ) -- the query
12 select uid1
13 , rid
14 , time_type
15 , date_time
16 from (select uid1
17 , rid
18 , time_type
19 , date_time
20 , row_number() over(partition by rid, time_type order by rid) as rn
21 from t1
22 )
23 order by rid, rn, time_type
24 /
结果:
UID1 RID TIME_TYPE DATE_TIME
---- ---------- ---------- -----------------
a11 1 1 5/4/2013 00:32:00
a94 1 2 5/4/2013 00:32:05
a43 2 1 5/4/2013 00:32:01
a68 2 2 5/4/2013 00:32:02
a98 2 1 5/4/2013 00:32:03
a35 2 2 5/4/2013 00:32:07
a45 2 1 5/4/2013 00:32:04
a33 2 2 5/4/2013 00:32:08
8 rows selected