Как я могу зациклить, чтобы получить предыдущее значение, когда текущее значение больше, чем предыдущее?
Источник:
Seq Amount 1 50 2 48 3 46 4 40 5 45 6 43 7 39
Вот что я хочу,
когда сумма в текущей строке больше последней, она изменяется на предыдущую.
Например, в строке 5 сумма 45>40 в строке 4, затем измените ее на 40
в строке 6 сумма 43>40 в обновленной строке 5, затем измените ее на 40
Это ожидаемый результат:
Seq Amount 1 50 2 48 3 46 4 40 5 40 6 40 7 39
Я в настоящее время использую лаг (количество) более (заказ по seq)
Однако результат не является правильным. Я думаю, что мне нужен скрипт цикла, но я не уверен, как это сделать, пожалуйста, помогите.
Спасибо!
2 ответа
Обновите столбец, используя логику, предоставленную RedFilter в цикле while, пока значение @@rowcount = 0
Вот более общая версия, не требующая LAG
:
Настройка схемы MS SQL Server 2008:
CREATE TABLE Table1
([Seq] int, [Amount] int)
;
INSERT INTO Table1
([Seq], [Amount])
VALUES
(1, 50),
(2, 48),
(3, 46),
(4, 40),
(5, 45),
(6, 43),
(7, 39)
;
Запрос 1:
select t1.Seq, case when t1.Amount < t2.Amount or t2.Amount is null then t1.Amount else t2.Amount end as Value
from Table1 t1
left join Table1 t2 on t2.Seq = t1.Seq - 1
order by t1.Seq
| Seq | Value |
|-----|-------|
| 1 | 50 |
| 2 | 48 |
| 3 | 46 |
| 4 | 40 |
| 5 | 40 |
| 6 | 43 |
| 7 | 39 |