如何获取并处理2条记录然后是连续对?

时间:2019-06-05 08:46:46

标签: 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  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)

我需要可滚动光标吗?如何获得?

1 个答案:

答案 0 :(得分:1)

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

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;

enter image description here

Demo