-1

私はこの表を下に持っています

uid    rid   time_type    date_time

a11    1     2            5/4/2013 00:32:00 (row1)
a43    1     1            5/4/2013 00:32:01 (row2)
a68    1     1            5/4/2013 00:32:02 (row3)
a98    1     2            5/4/2013 00:32:03 (row4)
a45    1     2            5/4/2013 00:32:04 (row5)
a94    1     1            5/4/2013 00:32:05 (row6)
a35    1     2            5/4/2013 00:32:07 (row7)
a33    1     2            5/4/2013 00:32:08 (row8)

通常の選択クエリを使用して、次のようにデータを抽出できますか

uid    rid   time_type    date_time

a43    1     1            5/4/2013 00:32:01 (row2)
a98    1     2            5/4/2013 00:32:03 (row4)
a94    1     1            5/4/2013 00:32:05 (row6)
a35    1     2            5/4/2013 00:32:07 (row7)

date_time フィールドは昇順です。論理的には、time_type '1' は、同じrid の次の time_type '2' とペアにする必要があります。time_type '1' または '2' が date_time で並べられた 2 つ以上のグループに表示される場合、早い方を採用し、残りは無視します。

これはできますか?

4

1 に答える 1

0

このクエリを試してください:

with src as (
  select tst.*,  
         case when time_type <> lag( time_type) over ( partition by rid order by date_time, time_type ) 
            then 1 else 0
         end take_me
  from tst
) 
select * from src where take_me = 1
order by rid, date_time;

ここにSQL Fiddleのデモがあります

于 2013-07-24T00:09:30.340 に答える