Sql server 2008 如何获取和处理2条记录,然后是连续的一对?

Sql server 2008 如何获取和处理2条记录,然后是连续的一对?,sql-server-2008,Sql Server 2008,我需要一个接一个地处理记录,将每个记录与之前的记录进行比较,然后移动到下一个记录,并执行相同的操作,直到最后一个记录 加工结构 id dat qty dif 1 2019-05-01 2 NULL 2 2019-05-01 6 NULL 3 2019-05-01 3 NULL 1 2019-05-02 4 NULL 2 2019-05-02 7 NULL 3 2019-05-02 5 NULL 预期结果 id da

我需要一个接一个地处理记录,将每个记录与之前的记录进行比较,然后移动到下一个记录,并执行相同的操作,直到最后一个记录

加工结构

id  dat        qty  dif
1   2019-05-01  2   NULL
2   2019-05-01  6   NULL
3   2019-05-01  3   NULL
1   2019-05-02  4   NULL
2   2019-05-02  7   NULL
3   2019-05-02  5   NULL
预期结果

id  dat        qty  dif
1   2019-05-01  2   0
1   2019-05-02  4   2
2   2019-05-01  6   0
2   2019-05-02  7   1
3   2019-05-01  3   0
3   2019-05-02  5   2
对于id=1和dat=2019-05-01,dif=2-0,即当前数量减去先前数量 对于id=1和dat=2019-05-02,dif=4-2


我需要滚动光标吗?如何获取它?

由于SQL Server 2008不支持滞后,我们可以尝试使用相关子查询模拟它:

SELECT
    id,
    dat,
    qty,
    qty - COALESCE((SELECT TOP 1 t2.qty FROM yourTable t2
           WHERE t2.id = t1.id AND t2.dat < t1.dat
           ORDER BY t2.dat DESC), t1.qty) AS dif
FROM yourTable t1
ORDER BY
    id, dat;