我就餐的格式如下:
SomeID SomeData
1 3
2 7
3 9
4 10
5 14
. .
. .
我想找出这个表中连续元素之间的差额之和。即(7-3) + (9-7) + (10-9) + (14-10) +.
这是最好的方法
发布于 2018-07-12 05:51:28
在Server的任何版本上都应该使用的一种方法是自联接:
SELECT
t1.SomeID,
t2.SomeData - t1.SomeData AS diff
FROM yourTable t1
LEFT JOIN yourTable t2
ON t1.SomeID = t2.SomeID - 1;
这假设您希望将diff报告为给定行的SomeData
的铅值,减去SomeData
的当前值。此查询还假定SomeID
是一个连续序列。
使用LEAD
SELECT
SomeID,
LEAD(SomeData, 1) OVER (ORDER BY SomeID) - SomeData AS diff
FROM yourTable;
发布于 2018-07-12 05:55:49
使用SQl Server 2012。
CREATE TABLE #temp
(
Someid INT ,
SomeData INT
);
INSERT INTO #temp
VALUES ( 1, 3 ) ,
( 2, 7 ) ,
( 3, 9 ) ,
( 4, 10 ) ,
( 5, 14 );
SELECT *
FROM #temp;
SELECT SUM(LeadSomeData) AS FinalSum
FROM ( SELECT LEAD(SomeData) OVER ( ORDER BY Someid ASC ) - SomeData AS LeadSomeData
FROM #temp ) t;
DROP TABLE #temp;
发布于 2018-07-12 05:57:21
我想你想要这个:
Select Sum(d2.data-d1.data) from #data d1 join #data d2 on d1.id+1 = d2.id
模式:
Create table #data (id int, data int)
Insert into #data values
(1, 3),
(2, 7),
(3, 9),
(4, 10),
(5, 14)
https://stackoverflow.com/questions/51298109
复制相似问题