gpt4 book ai didi

sql - 如何选择前一行值?

转载 作者:行者123 更新时间:2023-12-02 23:04:36 26 4
gpt4 key购买 nike

如何从 SELECT 语句的上一个结果行获取值

如果我们有一个名为 cardevent 的表,并且有行 [ID(int) , Value(Money) ],并且其中有一些行,例如

ID --Value

1------70
1------90
2------100
2------150
2------300
3------150
3------200
3-----250
3-----280

等等...

如何创建一个查询来获取每一行 ID、值和上一行值,其中数据如下所示

ID --- Value ---Prev_Value

1 ----- 70 ---------- 0
1 ----- 90 ---------- 70
2 ----- 100 -------- 90
2 ------150 -------- 100
2 ------300 -------- 150
3 ----- 150 -------- 300
3 ----- 200 -------- 150
3 ---- 250 -------- 200
3 ---- 280 -------- 250

等等。

我进行了以下查询,但在处理大量数据时性能非常糟糕

SELECT cardevent.ID, cardevent.Value, 
(SELECT F1.Value
FROM cardevent as F1
where F1.ID = (SELECT Max(F2.ID)
FROM cardevent as F2
WHERE F2.ID < cardevent.ID)
) AS Prev_Value
FROM cardevent

那么有人可以帮助我找到解决此类问题的最佳解决方案吗?

最佳答案

这个应该适用于两个数据库:

SELECT cardevent.ID, cardevent.Value, 
(SELECT TOP 1 F1.Value
FROM cardevent as F1
WHERE F1.ID < cardevent.ID
ORDER BY F1.ID DESC
) AS Prev_Value
FROM cardevent

更新:假设 ID 不是唯一的,但 ID 和 Value 的组合是唯一的(您必须指定对表进行排序的内容,这样人们就知道什么是前一行),您必须使用此查询:

select cardevent.ID, cardevent.Value, 
(select TOP 1 F1.Value from cardevent as F1
where (F1.ID < cardevent.ID) or (F1.ID = cardevent.ID and F1.Value < cardevent.Value)
order by F1.ID DESC, F1.Value DESC
) AS Prev_Value
from cardevent

关于sql - 如何选择前一行值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com