首页 > 解决方案 > 如何获取和处理 2 条记录,然后是连续对?

问题描述

我需要一个一个地处理记录,将每个记录与之前的记录进行比较,然后移动到下一个记录,直到最后一条记录为止。

处理结构

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

解决方案


由于 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;

在此处输入图像描述

演示


推荐阅读