Sql server 对查询结果求和

Sql server 对查询结果求和,sql-server,Sql Server,我用下面的代码做了一个查询,效果很好。然后我需要对diff列求和,这将给出总金额。它还需要忽略总和中的第一行以反映真实结果 select col, col - coalesce(lag(col) over (order by id), 0) as diff from t; 这就是查询结果,我需要将结果作为diff列的和,在本例中为8 由OP添加为评论,添加到问题中 下面是查询。如何提高性能 选择SUMresult 从…起 选择col1, col1-将lagcol1按col1的顺序合并,

我用下面的代码做了一个查询,效果很好。然后我需要对diff列求和,这将给出总金额。它还需要忽略总和中的第一行以反映真实结果

select col,
    col - coalesce(lag(col) over (order by id), 0) as diff
from t;
这就是查询结果,我需要将结果作为diff列的和,在本例中为8

由OP添加为评论,添加到问题中

下面是查询。如何提高性能

选择SUMresult 从…起 选择col1, col1-将lagcol1按col1的顺序合并,结果为0 从桌子上 其中Cast_标记为“07:00”和“15:00”之间的时间 和DATEPARTDAY,T_邮票='20' 和DATEPARTMONTH,T_邮票='05' 和DATEPARTYEAR,T_邮票='2020' 附属的
你不需要这么复杂。您可以简单地使用RANGE with SUM aggregate函数

声明@table col1 int 插入@表值1,2,3,4,5 选择col1,SUMcol1在当前行和无界行之间按col1范围超额订购,如下所示: 来自@table col1订购 **更新:基于OP编辑,更新答案**

SELECT SUM(Diff) as diff_sum
FROM
(
SELECT col1, 
ISNULL(col1 - LAG(col1) OVER(ORDER BY Col1),0) AS DIFF
FROm @table
) AS T
结果集


请以格式化文本的形式显示一些示例数据和预期结果。您仍在添加注释。。。问题:关于性能-比较整个日期时间,而不是部分-datepart不能在t_stamp列上使用可能的索引。@DaleK,是的。我运行了它并测试了它。这给出了列中所有值的总和,我只想在更改后对值求和。请提供示例数据以及如何在差异上计算总和?@RMcCarthy,更新了我的答案。对于您的要求,这只是一个好方法。
+------+------+
| col1 | diff |
+------+------+
|    1 |   15 |
|    2 |   14 |
|    3 |   12 |
|    4 |    9 |
|    5 |    5 |
+------+------+
SELECT SUM(Diff) as diff_sum
FROM
(
SELECT col1, 
ISNULL(col1 - LAG(col1) OVER(ORDER BY Col1),0) AS DIFF
FROm @table
) AS T
+----------+
| diff_sum |
+----------+
|        8 |
+----------+