按日期选择最后一行

时间:2013-10-25 06:21:53

标签: sql sql-server

我按照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。提前致谢

2 个答案:

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

在没有测试数据的情况下编写代码有点困难,但这应该可以解决问题