Re: Хитрая (?) выборка из MS SQL
От: kvasya  
Дата: 03.02.10 06:47
Оценка: 12 (1)
Здравствуйте, Odi$$ey, Вы писали:

OE>из нее надо выбрать только те строки, где меняется Param1 или Param2, они отмечены <<. База — MS SQL 2005/2008. Подскажите ключевые слова как это пооптимальнее изобразить.


А в чем засада?

declare @demo table ( dt int identity, param1 int, param2 int)

insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 1, 0 )
insert @demo ( param1, param2 ) values( 1, 0 )
insert @demo ( param1, param2 ) values( 1, 8 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 4 )
insert @demo ( param1, param2 ) values( 0, 4 )
insert @demo ( param1, param2 ) values( 2, 4 )
insert @demo ( param1, param2 ) values( 2, 4 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 0, 0 )
insert @demo ( param1, param2 ) values( 1, 0 )

select r.* from @demo r
    left join @demo prev on prev.dt = ( select max(dt) from @demo prevAll where prevAll.dt < r.dt)
    where r.param1 <> prev.param1 or r.param2 <> prev.param2 or prev.dt is null


Или засада в "как бы по эффективней"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.