我按照accNumber和Date(3rd coulmn)对数据进行了排序,并按accNumber和Rest分组。对于每个帐号,可能有许多日期(第3列,从最小到最大排序)。我想为每个accNumber选择具有最高日期(第3列)的行。这是用于排序和分组的代码(从这里我想为每个accNumber选择第3列中具有最大日期的行):
select a.accNumber, a.Rest, min(a.Date), max(b.Date)
from t1 a, t1 b
where a.Rest=b.Rest
and a.accnumber=b.accnumber
group by a.accNumber, a.Rest
order by a.accNumber, 3
我正在使用MS SQL。提前致谢
答案 0 :(得分:0)
请尝试:
SELECT
accNumber,
Rest,
Date,
MaxDate
FROM(
select
accNumber, Rest, Date,
MAX(Date) OVER (Partition by accNumber, Rest) MaxDate,
ROW_NUMBER() OVER(Partition by accNumber order by Date desc) RNum
from
t1
)x
WHERE RNum=1
答案 1 :(得分:0)
看起来你不需要在这里加入,你可以通过窗口函数来实现:
with cte as (
select
a.accNumber, a.Rest,
min(a.Date) over(partition by a.accNumber, a.Rest) as min_Date,
max(a.Date) over(partition by a.accNumber, a.Rest) as max_Date,
row_number() over(partition by a.accNumber order by a.Date desc) as rn
from t1 as a
)
select accNumber, Rest, min_Date, max_Date
from cte
where rn = 1
在没有测试数据的情况下编写代码有点困难,但这应该可以解决问题