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

GVa*_*ist 6 sql sql-server data-manipulation

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    
Run Code Online (Sandbox Code Playgroud)

差异列是我正在尝试生成的.我只需要找到连续行之间的差异:

特定AccountNumber有超过1行.


我设法删除了1个值/ AccountNumber [在这种情况下第1行和第4行]的行

我仍然需要找到与[row - row + 1]的区别我在Stack溢出时看到了几个答案,但它们似乎不适用于这种情况.

Har*_* CO 8

您可以使用以下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
Run Code Online (Sandbox Code Playgroud)

该  ROW_NUMBER() 函数为每一行分配一个数字. PARTITION BY 是可选的,但用于为组中的每个值开始编号,即:如果您PARTITION BY AccountNumber 然后为每个唯一AccountNumber值编号将从1开始 ORDER BY,当然用于定义编号应该如何,并且在该ROW_NUMBER()功能.

在cte中使用,然后可以使用ROW_NUMBER()to将连接偏移1个记录进行自联接,从而允许在行之间进行比较.

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