首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据结果获取两行之间的差异

如何根据结果获取两行之间的差异
EN

Stack Overflow用户
提问于 2015-12-22 00:03:09
回答 2查看 55关注 0票数 0

我有一张类似下面的桌子

代码语言:javascript
复制
  ID  Value
   1   5
   2   6
   3   4
   4   3
   5   7
   6   6
   7   8
   8   9

行之间的输出类似差异

代码语言:javascript
复制
  ID  Value difference
   1   5     null
   2   6     1  
   3   4     -2  
   4   3     -3   
   5   7      1    
   6   6     -1    
   7   8      1  
   8   9      -1

以上输出的场景:

代码语言:javascript
复制
1) id values difference
    1  5      1
    2  6

在上面的情况下,差异>0,所以我们需要考虑id2,3值来找出差异

代码语言:javascript
复制
   id values difference
    2  6     -2
    3  4

在上面的情况下,差异<=0,所以我们需要考虑id2,4值来找出差异

代码语言:javascript
复制
   id values difference
    2  6      -3
    4  3

在上面的情况下,差异<=0,所以我们需要考虑id2,5值来找出差异

代码语言:javascript
复制
   id values difference
    2  6      1
    5  7

在上面的情况下,差异>0,所以我们需要考虑id5,6值来找出差异

代码语言:javascript
复制
   id values difference
    5  7      -1
    6  6 

在上面的情况下,差异<=0,所以我们需要考虑id5,7值来找出差异

代码语言:javascript
复制
   id values difference
    5  7      1
    7  8

在上面的情况下,差异>0,所以我们需要考虑id7,8值来找出差异

代码语言:javascript
复制
   id values difference
    7  8      -1
    8  9 
EN

回答 2

Stack Overflow用户

发布于 2015-12-22 00:13:59

您最好在捕获结果集的编程环境中执行此操作。正如您所看到的,否则SQL语句会变得有点丑陋,当您有一个很大的表时,性能也会受到影响:

代码语言:javascript
复制
select    a.id, a.value, (a.value - b.value) as diff
from      test as a
left join test as b
       on b.id = (select max(id) from test where id < a.id)
order by  a.id;

这是fiddle

输出:

代码语言:javascript
复制
id value  diff
 1    5  (null)
 2    6    1
 3    4   -2
 4    3   -1
 5    7    4
 6    6   -1
 7    8    2
 8    9    1
票数 0
EN

Stack Overflow用户

发布于 2015-12-22 00:29:45

试一下,

代码语言:javascript
复制
  declare @t table (  ID int, Value int)
    insert into @t(id,value) values
       (1 ,  5),
       (2 ,  6),
       (3 ,  4),
       (4 ,  3),
       (5 ,  7),
       (6 ,  6),
       (7 ,  8),
       (8 ,  9)
       select id,value,value-n  as diff from @t t
 cross apply (select max(value) n from @t where id<t.id) t1

结果

代码语言:javascript
复制
id  value   diff
1   5   NULL
2   6   1
3   4   -2
4   3   -3
5   7   1
6   6   -1
7   8   1
8   9   1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34399773

复制
相关文章

相似问题

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