当currentrnt值大于前一个值时,如何循环获取前一个值?

时间:2016-01-07 03:28:41

标签: sql sybase-iq

来源:

Seq Amount
1   50
2   48
3   46
4   40
5   45
6   43
7   39

这就是我想要的,
当当前行中的金额大于最后一个金额时,它会变为前一个金额 例如,在行5中,行4中的量> 45>,然后将其改变为40
在第6行中,更新的行5中的数量43> 40,然后将其更改为40

这是预期的结果:

Seq Amount
1   50
2   48
3   46
4   40
5   40
6   40
7   39

我目前正在使用滞后(金额)(按顺序排列)
但是,结果不正确。我想我需要一个循环脚本,但我不知道该怎么做,请帮忙。
谢谢!

2 个答案:

答案 0 :(得分: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

<强> Results

| Seq | Value |
|-----|-------|
|   1 |    50 |
|   2 |    48 |
|   3 |    46 |
|   4 |    40 |
|   5 |    40 |
|   6 |    43 |
|   7 |    39 |

答案 1 :(得分:0)

使用RedFilter在while循环中提供的逻辑更新列,直到值@@ rowcount = 0