我正在寻找更新 sql 中的计算总和
基本上我有一张桌子:
ImportID SeiralNumber Day Hour value Difference Complete
1 123 1 1 6 NULL 0
2 123 1 2 8 NULL 0
3 123 1 5 21 NULL 0
4 123 1 6 28 NULL 0
5 222 2 2 12 NULL 0
6 222 2 5 18 NULL 0
7 222 2 4 16 NULL 0
8 222 1 12 8 NULL 0
对于每个序列号,将有一天 1-365 和小时到 1-12,我要做的就是计算与之前记录的差异
因此,以 ImportID 6 为例,我需要获取同一天和前一小时的记录(importID 7),然后我需要使用 18 -17 = 1 的值字段更新差异。
注意 序列中可能存在间隙,如果没有先前的记录,则差异应保持为NULL
。一旦他们被计算出来,他们需要被插入到一个新的表中,只有当差异是现在not null
并且它已经不存在于表中时,在成功插入时它们被标记为complete。之前的记录也可以是前一天(第 1 天第 12 小时)之前的记录(第 2 天,第 1 小时)
目前我正在使用循环来选择空值,获取上一条记录,更新记录,如果它可以插入其他表,则更新 Completed 字段。
我的问题是,这正在处理一百万条记录,并且需要很长时间才能将适用的记录(已完成 = 0)选择到临时表中并遍历每个记录。
有没有更快的方法将这些作为更新声明进行批量处理?还是单独声明?
结果应该是
ImportID SeiralNumber Day Hour value Difference Complete
1 123 1 1 6 NULL 0
2 123 1 2 8 2 1
3 123 1 5 21 NULL 0
4 123 1 6 28 7 1
5 222 2 1 12 4 1
6 222 2 5 18 2 1
7 222 2 4 16 NULL 0
8 222 1 12 8 NULL 0
提前致谢