gpt4 book ai didi

sql - 唯一 ID 的连续行中的值之间的差异

转载 作者:行者123 更新时间:2023-12-02 18:56:08 25 4
gpt4 key购买 nike

SQL Server 2008 R2。

我需要根据共同的唯一 ID 查找连续行之间的差异。

Data:

AccountNumber ValueDate CustomerName Amount Difference

1 06/01/2014 Customer Name 1 -3436.184178
2 06/03/2014 Customer Name 2 -154.5 -51.5
2 06/15/2014 Customer Name 2 -103
3 06/02/2014 Customer Name 3 -45289.44
4 06/20/2014 Customer Name 4 -4907.52 -1116.43
4 06/25/2014 Customer Name 4 -3791.09 -3791.09
4 06/30/2014 Customer Name 4 -3302.19

差异列是我想要生成的。我需要找到连续行之间的差异仅当:

特定 AccountNumber 的行数超过 1 行。

<小时/>

我设法删除了具有 1 个值/AccountNumber 的行[本例中为第 1 行和第 4 行]

我还需要找出与 [row - row + 1] 的区别我在堆栈溢出上看到了几个答案,但它们似乎不适用于这种情况。

最佳答案

您可以使用ROW_NUMBER()函数执行此操作:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY AccountNumber ORDER BY ValueDate) AS RN 
FROM YourTable)
SELECT a.*,a.Amount - b.Amount AS Diff
FROM cte a
LEFT JOIN cte b
ON a.AccountNumber = b.AccountNumber
AND a.RN = b.RN -1

ROW_NUMBER() 函数为每一行分配一个数字。 PARTITION BY 是可选的,但用于为组中的每个值开始编号,即:如果您PARTITION BY AccountNumber,则为每个唯一的AccountNumber code> 值将从 1 开始编号。 ORDER BY 当然用于定义编号方式,并且在 ROW_NUMBER() 函数中是必需的。

在 cte 中使用时,您可以使用 ROW_NUMBER() 自联接,将联接偏移 1 条记录,从而允许在行之间进行比较。

在 SQL Server 2012 中,LEAD()LAG() 函数允许更简单的跨行比较。

关于sql - 唯一 ID 的连续行中的值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25557273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com