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

Amr*_*awy 4 sql ms-access

如果我们有一个名为 FollowUp 的表,并且有行 [ ID(int) , Value(Money) ],并且其中有一些行,例如
ID --Value
1------70
2------ 100
3------150
8------200
20-----250
45-----280
我们想要创建一个 SQL 查询来获取每一行 ID、值和上一行数据显示如下的值
ID --- Value ---Prev_Value
1 ----- 70 ---------- 0
2 ----- 100 -------- 70
3 ----- 150 -------- 100
8 ----- 200
-------- 150 20 ---- 250 -------- 200
45 -- -- 280 -------- 250

我进行了以下查询,但我认为它在大量数据中的性能非常糟糕

SELECT FollowUp.ID, FollowUp.Value,
(   
      SELECT F1.Value
      FROM FollowUp as F1 where 
      F1.ID =
             ( 
                SELECT  Max(F2.ID) 
                FROM FollowUp as F2 where F2.ID < FollowUp.ID  
             ) 
) AS Prev_Value
FROM FollowUp
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*gus 5

尽管这些类型的查询往往对性能要求较高,但此 sql 的性能应该比上面的 SQL 更好……因此,您可以在其中放入任何内容来限制您正在查看的数据集的大小,这将有很大帮助。例如,如果您正在查看特定的日期范围,请将其输入。

SELECT followup.value, 
    ( SELECT TOP 1 f1.VALUE 
      FROM followup as f1 
      WHERE f1.id<followup.id 
      ORDER BY f1.id DESC
    ) AS Prev_Value
FROM followup
Run Code Online (Sandbox Code Playgroud)

华泰