SQL Select MAX和2nd MAX

时间:2014-05-29 20:21:00

标签: sql sql-server sql-server-2008

我正在针对 MS SQL Server 2008 运行查询,并且正在选择一个帐号以及按帐号分组的列mydate的最大值:

select AccountNumber,
       max(mydate),
from #SampleData
group by AccountNumber

我想在结果中添加一列,其中包含与AccountNumber组关联的第二高的mydate。我知道它必须是这样的:

select max(mydate)
from #SampleData
where mydate < (select max(mydate) from #SampleData)

但是如何在一个选择查询中获得最大和第二个最大值?

4 个答案:

答案 0 :(得分:2)

您没有指定DBMS,因此这是ANSI SQL:

select accountnumber,
       rn,
       mydate
from (
   select accountnumber, 
          mydate, 
          row_number() over (partition by accountnumber order by mydate desc) as rn
   from #SampleData
) t
where rn <= 2;

答案 1 :(得分:1)

试试这个

Select AccountNumber,
MAX(Case when Rnum = 1 Then mydate END) mydate_1,
MAX(Case when Rnum = 2 Then mydate END) mydate_2
From
(
select 
AccountNumber, mydate,
ROW_NUMBER() OVER (PARTITION By AccountNumber ORDER BY mydate DESC) as Rnum
from #SampleData
) V
Group By AccountNumber

答案 2 :(得分:0)

这样的东西应该选择第二高:

select AccountNumber,
   max(mydate),
   (select max(SD2.mydate) from #SampleData SD2 where SD2.AccountNumber=#SampleData.AccountNumber AND SD2.mydate<max(#SampleData.mydate))
from #SampleData
group by AccountNumber

答案 3 :(得分:0)

您还可以使用TOP N子句结合订单:

select    
          TOP 2
          accountnumber, 
          mydate, 
          row_number() over (partition by accountnumber order by mydate desc) as rn
from #SampleData
ORDER BY
          row_number() over (partition by accountnumber order by mydate desc)