use*_*055 1 sql-server greatest-n-per-group
我有一张如下表:
SELECT [EffectiveDate]
,[Rate]
[ModUser]
FROM [Vision]
Run Code Online (Sandbox Code Playgroud)
有很多行带有 ModUsers 名称。我需要提供 ModUsers 名称并获取最新费率。
我怎么做?
有很多方法可以做到这一点。这里是其中的一些:
带row_number()版本的公共表表达式:
with cte as (
select *
, rn = row_number() over (
partition by ModUser
order by EffectiveDate desc
)
from Vision
)
select ModUser, EffectiveDate, Rate
from cte
where rn = 1;
Run Code Online (Sandbox Code Playgroud)
cross apply 版本:
select distinct
t.ModUser
, x.EffectiveDate
, x.Rate
from Vision t
cross apply (
select top 1
ModUser
, EffectiveDate
, Rate
from Vision i
where i.ModUser = t.ModUser
order by i.EffectiveDate desc
) as x;
Run Code Online (Sandbox Code Playgroud)
top with ties 版本:
select top 1 with ties
*
from Vision
where
order by
row_number() over (
partition by ModUser
order by EffectiveDate desc
);
Run Code Online (Sandbox Code Playgroud)
inner join 版本:
select
v.ModUser
, v.EffectiveDate
, v.Rate
from Vision v
inner join (
select
ModUser
, MaxEffectiveDate = max(i.EffectiveDate)
from Vision i
group by ModUser
) as x on x.ModUser = v.ModUser
and x.MaxEffectiveDate = v.EffectiveDate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5416 次 |
| 最近记录: |