Здравствуйте, 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
Или засада в "как бы по эффективней"?