Select 最大值并仅按一列分组
Select max and group by only one column
我在使用 max 函数时难以 select 多列,因为我只希望它按一列分组。
这是我的数据集:
UPDATED_DATE ACCOUNT_NUMBER LIMIT
------------ -------------- -----
2020-02-01 ABC123 100
2020-02-06 ABC123 300
2020-03-04 XYZ987 500
2020-05-19 XYZ987 100
这是我希望看到的结果:
UPDATED_DATE ACCOUNT_NUMBER LIMIT
------------ -------------- -----
2020-02-06 ABC123 300
2020-05-19 XYZ987 100
感谢您的帮助。
您可以使用 window 函数:
select t.*
from (select t.*, row_number() over partition by account_number order by updated_date desc) as seqnum
from t
) t
where seqnum = 1;
或者 -- 使用正确的索引通常性能稍好一些的方法 --:
select t.*
from t
where t.updated_date = (select max(t2.updated_date) from t t2 where t2.account_number = t.account_num);
或者,如果您不喜欢子查询并且不太关心性能:
select top (1) with ties t.*
from t
order by row_number() over (partition by account_number order by updated_date desc);
我在使用 max 函数时难以 select 多列,因为我只希望它按一列分组。
这是我的数据集:
UPDATED_DATE ACCOUNT_NUMBER LIMIT
------------ -------------- -----
2020-02-01 ABC123 100
2020-02-06 ABC123 300
2020-03-04 XYZ987 500
2020-05-19 XYZ987 100
这是我希望看到的结果:
UPDATED_DATE ACCOUNT_NUMBER LIMIT
------------ -------------- -----
2020-02-06 ABC123 300
2020-05-19 XYZ987 100
感谢您的帮助。
您可以使用 window 函数:
select t.*
from (select t.*, row_number() over partition by account_number order by updated_date desc) as seqnum
from t
) t
where seqnum = 1;
或者 -- 使用正确的索引通常性能稍好一些的方法 --:
select t.*
from t
where t.updated_date = (select max(t2.updated_date) from t t2 where t2.account_number = t.account_num);
或者,如果您不喜欢子查询并且不太关心性能:
select top (1) with ties t.*
from t
order by row_number() over (partition by account_number order by updated_date desc);