获取SQL Server中每个人的先前日期

时间:2015-03-22 00:04:18

标签: sql sql-server-2008

我想为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

1 个答案:

答案 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

SQLFIDDLE DEMO