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

如果我们有一个名为FollowUp的表并且有行[ID(int),Value(Money)]
例如,我们在其中有一些行
ID – 值
1 —— 70
2 —— 100
3 —— 150
8 —— 200
20 —– 250
45 —– 280
并且我们想要创建一个SQL查询,以获取每个行ID,值和前面的行值,其中数据显示如下
ID —值— 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

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

解决方法

这个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

HTH

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...