首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server表中每个连续项之间的差和

Server表中每个连续项之间的差和
EN

Stack Overflow用户
提问于 2018-07-12 05:45:35
回答 3查看 122关注 0票数 2

我就餐的格式如下:

代码语言:javascript
运行
复制
SomeID  SomeData

1       3
2       7
3       9
4       10
5       14
.       .
.       .

我想找出这个表中连续元素之间的差额之和。即(7-3) + (9-7) + (10-9) + (14-10) +.

这是最好的方法

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-12 05:51:28

在Server的任何版本上都应该使用的一种方法是自联接:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
SELECT
    SomeID,
    LEAD(SomeData, 1) OVER (ORDER BY SomeID) - SomeData AS diff
FROM yourTable;
票数 3
EN

Stack Overflow用户

发布于 2018-07-12 05:55:49

使用SQl Server 2012。

代码语言:javascript
运行
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2018-07-12 05:57:21

我想你想要这个:

代码语言:javascript
运行
复制
Select Sum(d2.data-d1.data) from #data d1 join #data d2 on d1.id+1 = d2.id

模式:

代码语言:javascript
运行
复制
Create table #data (id int, data int)
Insert into #data values 
(1, 3),
(2, 7),
(3, 9),
(4, 10),
(5, 14)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51298109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档