SQL выбирает строки, где значение изменилось - PullRequest
0 голосов
/ 12 октября 2018

У меня есть такая таблица:

id     |   diameter
___________________
100    |     5.0             
101    |     5.0                      
102    |     3.0             
103    |     3.0         
104    |     3.0         
105    |     6.0       
106    |     6.0

SELECT a.* FROM tableX AS a WHERE a.diameter <> ( SELECT TOP 1 b.diameter FROM tableX AS b WHERE a.id > b.id ORDER BY b.id )             

Мне нужен запрос, чтобы показать мне идентификатор места, в котором изменился диаметр.В этом примере мне нужно, чтобы отобразить идентификатор 102 и идентификатор 105

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вам нужно перебрать все записи и сравнить, если prev_Record = curr_Record.Если условие ложно, я бы в переменную @temp вернул его в конце

0 голосов
/ 12 октября 2018

Вы хотите использовать lag() в SQL Server 2012 +:

select t.*
from (select t.*, lag(t.diameter) over (order by t.id) as prev_diameter
      from t
     ) t
where prev_diameter <> diameter;

В SQL Server 2008 может работать коррелированный подзапрос или apply:

select t.*
from t cross apply
     (select top (1) t2.*
      from t t2
      where t2.id < t.id
      order by t2.id desc
     ) tprev
where tprev.diameter <> t.diameter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...