【问题标题】:Subtract values from subsequent row从后续行中减去值
【发布时间】:2021-02-05 14:02:38
【问题描述】:

我有一种情况,我需要通过从第一列中减去来生成第二列。有什么办法可以做到这一点。

【问题讨论】:

  • 是否还有ID列之类的?
  • 什么决定了顺序?你看过LEAD/LAG吗?
  • @jarlh 是的,我有。我已经更新了问题。
  • 请阅读this,了解一些改进问题的技巧。

标签: sql-server tsql


【解决方案1】:

看起来你想要lead()

select col1, 
       lead(col1) over (order by col1) - 1
from t;

如果你想395作为最终值,你可以添加一个默认值:

select col1, 
       lead(col1, 1, 396) over (order by col1) - 1
from t;

【讨论】:

  • 值将是动态的,我无法设置最终值。最后我得到 Null 值。
  • @VirenderThakur 。 . .这就是第一个版本所做的。
  • 抱歉,我将最后一列设为 NULL。 pasteboard.co/JMXy7cH.png
  • @VirenderThakur 。 . .正确的。如果你不想要NULL,你可以使用第二个版本或coalesce()
【解决方案2】:

如果由于某种原因不能使用窗口函数,可以根据ID列加入:

select mt1.col1, mt2.col1 - 1 col2
from myTable mt1
left join myTable mt2 on mt1.Id = mt2.Id - 1 

您只需要处理最大 Id 的行,因为它在第二列中将有 null

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2023-01-12
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多