如何获取和处理 2 条记录然后连续对?
How do I fetch and process 2 records then consecutive pair?
我需要一个接一个地处理记录,将每个记录与其之前的记录进行比较,然后移至下一个并执行相同的操作直到最后一个记录。
要处理的结构
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不支持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;
我需要一个接一个地处理记录,将每个记录与其之前的记录进行比较,然后移至下一个并执行相同的操作直到最后一个记录。
要处理的结构
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不支持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;