我有下面的表:
filename,filetype,version和revision。
我想编写一个查询,为 a and找到最高的 versionAND 。例如,以下将起作用:revisionfilenamefiletype
select
filename
,filetype
,max(version + revision) as combined
from dmkr_asline.cmires_lbyi
group by filename, filetype
order by filename, filetype;
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够返回version并revision作为单独的列,以便我可以加入另一个表。我不能使用max,因为我想在每列max revision的max version。
使用top with tieswithrow_number()获取每个andrevision的最高值的行。versionfilenamefiletype
select top 1 with ties
filename
, filetype
, version
, revision
from dmkr_asline.cmires_lbyi
order by row_number() over (
partition by filename, filetype
order by version desc, revision desc
);
Run Code Online (Sandbox Code Playgroud)
替代使用公用表表达式与row_number()
;with cte as (
select
filename
, filetype
, version
, revision
, rn = row_number() over (
partition by filename, filetype
order by version desc, revision desc
)
from dmkr_asline.cmires_lbyi
)
select
filename
, filetype
, version
, revision
from cte
where rn = 1
order by filename, filetype
Run Code Online (Sandbox Code Playgroud)
cross apply() 版本:
select distinct
t.filename
, t.filetype
, x.version
, x.revision
from dmkr_asline.cmires_lbyi t
cross apply (
select top 1
i.version
, i.revision
from dmkr_asline.cmires_lbyi as i
where i.filename = t.filename
and i.filetype = t.filetype
order by i.version desc, i.revision desc
) as x
Run Code Online (Sandbox Code Playgroud)
inner join 版本:
select
t.filename
, t.filetype
, x.version
, revision = max(t.revision)
from dmkr_asline.cmires_lbyi t
inner join (
select
i.filename
, i.filetype
, version = max(i.version)
from dmkr_asline.cmires_lbyi i
group by
i.filename
, i.filetype
) as x
on x.filename = t.filename
and x.filetype = t.filetype
and x.version = t.version
group by
t.filename
, t.filetype
, x.version
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |