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溢出时看到了几个答案,但它们似乎不适用于这种情况.
您可以使用以下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()函数允许更简单的跨行比较.
| 归档时间: |
|
| 查看次数: |
7688 次 |
| 最近记录: |