我想为SQL Server 2008中的每个人(ID)获取每行的前一个日期。我有几百万行。例如:
ID TransactionDate
1 01/01/2012
1 01/20/2012
1 01/22/2012
2 01/20/2012
2 01/23/2012
2 01/25/2012
返回:
ID TransactionDate priorDate
1 01/01/2012 Null
1 01/20/2012 01/01/2012
1 01/22/2012 01/20/2012
2 01/20/2012 null
2 01/23/2012 01/20/2012
2 01/25/2012 01/23/2012
答案 0 :(得分:0)
只需使用self join CTE (left)
与row_number
:
WITH CTE AS (
SELECT ID, TransactionDate,
ROW_NUMBER() OVER ( PARTITION BY ID order by TransactionDate ) AS RowNumber
FROM table_name
)
SELECT a.ID,a.TransactionDate , aa.TransactionDate priorDate
FROM CTE a
LEFT OUTER JOIN CTE aa
ON a.RowNumber = aa.RowNumber + 1
And aa.ID=a.ID