1

我有一个类似于下面显示的示例的表。

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

4

2 回答 2

2

您没有指定 SQL Server 的哪个版本,但您可以PIVOT在 SQL Server 2005+ 中使用 CTE 和 a :

;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

请参阅带有演示的 SQL Fiddle

于 2012-08-30T14:48:28.847 回答
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;
于 2012-08-30T15:08:28.893 回答