1

我已按 accNumber 和 Date(第 3 列)对数据进行排序,并按 accNumber 和 Rest 对其进行分组。对于每个帐号,可能有许多日期(第 3 列,从小到大排序)。我想为每个 accNumber 选择日期最高的行(第 3 列)。这是排序和分组的代码(从这里我想为每个 accNumber 选择第三列中日期最大的行):

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

4

2 回答 2

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

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

于 2013-10-25T06:52:57.557 回答
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
于 2013-10-25T06:25:42.937 回答