首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >行之间的SQL差异

行之间的SQL差异
EN

Stack Overflow用户
提问于 2011-06-10 06:12:57
回答 2查看 31.5K关注 0票数 25

我有一个SQL 2008数据库表,如下所示

代码语言:javascript
复制
name      score
-----------------------
steve     207
steve     205
steve     200
steve     139

我想要得到行之间的差值。eqn = row - (row + 1),所以理想情况下我希望它是,

代码语言:javascript
复制
steve 2   //207 - 205
steve 5   //205 - 200
steve 61  //200 - 139
steve 139 //139 - 0

做这件事最好的方法是什么?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-10 06:20:29

这是一种方法

代码语言:javascript
复制
with cte as
(SELECT
   ROW_NUMBER() OVER (PARTITION BY table.name ORDER BY id) row,
   name,
   score
 FROM table)
SELECT 
   a.name ,
   a.score - ISNULL(b.score,0)
FROM
   cte a
   LEFT  JOIN cte b
   on a.name = b.name
    and a.row = b.row+1
票数 26
EN

Stack Overflow用户

发布于 2011-06-10 22:33:20

另一种方法是使用lag():

代码语言:javascript
复制
SELECT
   name,
   score - coalesce(lag(score) over (partition by name order by id), 0)
FROM table
ORDER BY name, id

TSQL中的lag()函数doesn't seem to be available,但建议在注释中使用此解决方法:

代码语言:javascript
复制
select name,
    score - coalesce(
    MIN(score) OVER (PARTITION BY name ORDER BY id
             ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
    , 0) as diff
from table
order by name, id
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6299950

复制
相关文章

相似问题

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