选择最后三个日期,并在每个ID中显示一行

时间:2012-12-18 09:15:05

标签: sql sql-server-2008

我有一张销售记录表格,其中特定销售订单可以更新多次次。我需要获取 3 最新更新,并将其显示在单行中。

我看过question,但我正在努力让它为我工作。

编辑:

以下是原始数据的示例:

order no   DateTime
4774875 1
4774875 2
4774875 3
4944839 3
4944839 2
4944839 1
5245283 1
5245283 2
5245283 3
5268774 3
5268774 2
5268774 1
5268813 1
5268813 2
5268813 3

理想的输出:

Order no    Date1   Date2   Date3
4774875 1   2   3
4944839 1   2   3
5245283 1   2   3
5268774 1   2   3
5268813 1   2   3

1 个答案:

答案 0 :(得分:0)

试试这个。 Here is the fiddle

注意:这是根据您的OP,我认为您需要1 2 3中的single col。您可能需要PIVOT to get them in 3 separate columns

SELECT T1.oid, REPLACE( (SELECT T2.d AS [data()]
            FROM T T2
            WHERE T2.oid = T1.oid
            ORDER BY T2.d
            FOR XML PATH('')),' ', ' : ') x           
FROM (SELECT oid,d, rank() over(partition by oid order by d desc) rk 
FROM T) T1
WHERE rk <=3
GROUP BY oid

--Results (you can remove : if you don't need it)
4774875 1 : 2 : 3
4944839 1 : 2 : 3
5245283 1 : 2 : 3
5268774 1 : 2 : 3
5268813 1 : 2 : 3