Как я могу зациклить, чтобы получить предыдущее значение, когда текущее значение больше, чем предыдущее?

Источник:

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:

SQL Fiddle

Настройка схемы 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 |
Другие вопросы по тегам