我有一个类似于下面示例的表格。
AccountNo DateOfOrder OrderID
-----------------------------------------
123 March 1 2010 1
222 March 3 2010 2
123 April 1 2010 3
345 March 15 2010 77
123 june 1 2010 55
123 march 5 2010 33
345 march 1 2010 99
222 june 1 2010 7
222 june 2 2010 22
我需要一个输出三列的查询:
AccountNo
,MostRecentDateOfOrder
,SecondMostRecentDateOfOrder
答案 0 :(得分:2)
您没有指定SQL Server的哪个版本,但您可以在SQL Server 2005 +中使用CTE和PIVOT
:
;with cte as
(
select accountno, dateoforder, orderid,
row_number() over(partition by accountno
order by dateoforder desc) rn
from yourtable
)
select accountno,
[1] MostRecentOrder,
[2] SecondMostRecent
from
(
select accountno, dateoforder, rn
from cte
) x
pivot
(
max(dateoforder)
for rn in ([1], [2])
) p
答案 1 :(得分:0)
这就是我在Oracle中的表现: -
SELECT MAX(ACCOUNTNO),
MAX(DateOfOrder) AS SecondMostRecentDateOfOder,
MIN(DateOfOrder) AS MostRecentDateOfOrder
FROM (
SELECT ACCOUNTNO, DateOfOrder, RANK() OVER (order by ACCOUNTNO, DateOfOrderdesc) RANK
FROM TABLE
)
WHERE RANK < 3;