sql-server-2008 - 如何获取和处理 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 不支持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;
演示
推荐阅读
- c# - UserControl:如何转换依赖属性并绑定到结果
- python - 划分 NumPy 数组时出现 MemoryError
- javascript - Angular6数组没有被存储
- c - 2d 动态分配内存错误
- java - 在应用程序进入 onPause 后启动计时器?
- android - Flutter android构建失败
- python - 使用 Python Tkinter 进行文件操作中的算术求和
- hyperledger-fabric - 超级账本结构错误:已取消 desc = 上下文已取消
- azure - 团队项目未从 Azure DevOps 中完全删除
- java - 错误:无法找到或加载主类 HelloWorld