我正在针对 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)
但是如何在一个选择查询中获得最大和第二个最大值?
答案 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)