1

我在下面有这张表

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)

逻辑是 1 的 time_type 需要与下一个对应的 time_type 2 配对才能实现相同的摆脱。这可以做到吗?

4

1 回答 1

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

SQLFiddle 演示

于 2013-07-18T18:54:40.683 回答