在单独的列中查询两个最近的订单日期

时间:2012-08-30 14:40:30

标签: sql sql-server

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

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   

我需要一个输出三列的查询:

AccountNoMostRecentDateOfOrderSecondMostRecentDateOfOrder

2 个答案:

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

请参阅SQL Fiddle with Demo

答案 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;
相关问题