2013-07-23 5 views
-1

У меня есть эта таблица нижеOracle SQL Условный Select Query

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 в порядке Asc. логика заключается в том, что time_type '1' должен быть сопряжен со следующим параметром time_type '2' того же самого диска. Если time_type '1' или '2' появляется в группе из 2 или более упорядоченных по дате_time, я возьму предыдущую и игнорирую остальные.

Можно ли это сделать?

+0

Это помечено MySQL и Oracle. Что вы используете? –

ответ

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 demo