为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在SELECT语句中访问“上一行”值?

有没有办法在SELECT语句中访问“上一行”值?

交互式爱情 2019-10-17 14:23:08
我需要计算表的两行之间的列差。有什么办法可以直接在SQL中执行此操作?我正在使用Microsoft SQL Server 2008。我正在寻找这样的东西:SELECT value - (previous.value) FROM table假设“上一个”变量引用了最近选择的行。当然,通过这样的选择,我最终将在具有n行的表中选择n-1行,这可能不是,实际上正是我所需要的。有可能吗?
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

SQL没有内置的顺序概念,因此您需要按某一列进行顺序,这样才有意义。像这样:


select t1.value - t2.value from table t1, table t2 

where t1.primaryKey = t2.primaryKey - 1

如果您知道如何对事物进行排序,但不知道如何在给定当前值的情况下获得先前的值(例如,您要按字母顺序进行排序),那么我不知道在标准SQL中执行此操作的方法,但是大多数SQL实现将具有扩展做到这一点。


如果您可以对行进行排序以使每个行都不同,则这是一种适用于SQL Server的方法:


select  rank() OVER (ORDER BY id) as 'Rank', value into temp1 from t


select t1.value - t2.value from temp1 t1, temp1 t2 

where t1.Rank = t2.Rank - 1


drop table temp1

如果需要打破平局,可以向ORDER BY添加尽可能多的列。


查看完整回答
反对 回复 2019-10-17
?
莫回无

TA贡献1865条经验 获得超7个赞

WITH CTE AS (

  SELECT

    rownum = ROW_NUMBER() OVER (ORDER BY columns_to_order_by),

    value

  FROM table

)

SELECT

  curr.value - prev.value

FROM CTE cur

INNER JOIN CTE prev on prev.rownum = cur.rownum - 1


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 591 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信