Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнение значений с предыдущей строкой  [new]
HeavyLight
Member

Откуда:
Сообщений: 7
Добрый вечер!
Есть таблица со столбцом сохраненных значений INT за долгое время. Необходимо сделать выборку строк чтоб значение между каждой следующей отличалось на @i. Хотелось бы стандартным select'ом, но похоже придется делать циклом:)
Заранее спасибо.
24 дек 14, 18:00    [17047819]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21055
А каким образом определёется порядок записей?
24 дек 14, 18:03    [17047843]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8493
Нет понятия предыдущая или следующая запись в таблице. Для такого рода поиска требуется задать порядок сортировки записей.
24 дек 14, 18:04    [17047847]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
HeavyLight
Member

Откуда:
Сообщений: 7
Конечно есть поле ID указывающий на строгий порядок
24 дек 14, 18:10    [17047880]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
JOIN на себя с условием по этому полю > id-@count
24 дек 14, 18:13    [17047893]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
mifi83
Member

Откуда:
Сообщений: 16
А как насчет
select field,LAG(field) OVER (ORDER BY field) as prev_value from table1 where LAG(field) OVER (ORDER BY field) - field=@i

?
P.S. сам не пробовал, потому за работоспособность не ручаюсь... так, мысля пришла
24 дек 14, 18:18    [17047915]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
mifi83
Member

Откуда:
Сообщений: 16
Простите, виноват...
if OBJECT_ID('tempdb..#add','U') is not null
drop table #add

create table #add (
tmID int not null
)

insert into #add(tmID)
values (1),(0),(2),(4),(5),(6),(8),(9),(11)

select tmID,prev_value from (
select tmID,LAG(tmID) OVER (ORDER BY tmID) as prev_value from #add) tmp 
where tmID- prev_value=2
24 дек 14, 18:23    [17047945]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
HeavyLight
Member

Откуда:
Сообщений: 7
mifi83,

LAG именно то что мне было нужно, но как я понимаю он работает только в MSSQL2014?
24 дек 14, 18:26    [17047959]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
mifi83
Member

Откуда:
Сообщений: 16
HeavyLight,
начиная с 2012
24 дек 14, 18:29    [17047978]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
mifi83
Member

Откуда:
Сообщений: 16
если порядок не важен, то можно и так
select a.tmId,b.tmID
from #add a join #add b on a.tmID=b.tmID+@i
24 дек 14, 18:38    [17048039]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
HeavyLight
Member

Откуда:
Сообщений: 7
Порядок важен, наверно я не точно описал, есть столбец ID указывающий на порядок и столбец VAL с различными значениями. Вот в VAL мне и нужно сравнивать |VAL_prev - VAL| >= @i
24 дек 14, 18:50    [17048105]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение значений с предыдущей строкой  [new]
mifi83
Member

Откуда:
Сообщений: 16
HeavyLight, в предложении OVER (ORDER BY ...) пропишите нужное поле
24 дек 14, 20:02    [17048374]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить