在 Db2 中如何计算相邻行的差异

Posted

技术标签:

【中文标题】在 Db2 中如何计算相邻行的差异【英文标题】:In Db2 how to calculate difference of adjacent rows 【发布时间】:2012-01-29 13:03:13 【问题描述】:

我想将范围计算为row1-row2,需要db2查询中的帮助来获取范围列

name,age,range   
a,40,0     
b,20,20  
c,7,13  
d,5,2  
e,1,4  

范围列计算

first value is 0  
(40-20)  
(20-7)  
(7-5)  
(5-1)  

【问题讨论】:

另请参阅此问题:Optimizing ROW_NUMBER() in SQL Server,了解实现相同结果的各种其他方法。 @ypercube:我认为该帖子与此处无关,因为它涉及使用窗口函数的值连接结果集。此外:性能是非常具体的实现。 @a_horse_with_no_name:我同意性能是特定于实现的。但是,如果没有 lag() 函数,您确实需要使用 Row_Number() 窗口函数(或其他一些自联接方式)进行自联接。 @ypercube:我同意。但是 DB2 确实有 lag() 函数 :) 我同意,对于具有该功能的版本,这是最好的方法。 【参考方案1】:
SELECT name, 
       age,
       (lag(age, 1, age) over (order by age desc)) - age as agediff
FROM your_table
ORDER BY age desc

【讨论】:

以上是关于在 Db2 中如何计算相邻行的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何计算以月为单位的差异 SQL DB2

计算两个不相邻行之间的差异

DB2,在尝试计算提供的时间戳和存储的时间戳之间的差异时,出现错误“函数的调用不明确”

如何从 DB2 中的两个时间戳中获取差异?

将“delta”列添加到矩阵中,包含每个相邻列中元素之间的差异值?

具有不同表结构的两个 DB2 表中的数据值之间的差异