Sql server 最大列概念。。。sql server

Sql server 最大列概念。。。sql server,sql-server,Sql Server,我有以下疑问- select System_Id, TeamProjectSK, System_State, System_Rev from ( select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev, row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc

我有以下疑问-

select System_Id, TeamProjectSK, System_State, System_Rev
from
(
select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev,
row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn
from dbo.DimWorkItem w1  
where w1.System_Id = 1691  
) d
where rn = 1
order by System_Id, TeamProjectSK,System_Rev desc;
输出看起来像-

System_Id    TeamProjectSK  System_State    System_Rev
1691     126              Closed              17
1691     126              Resolved            14
1691     126              Active              13
1691     126              Proposed            2
但是我希望我的输出选择具有最高“System\u Rev”值的行&它应该如下所示-

System_Id    TeamProjectSK  System_State    System_Rev
1691         126              Closed              17
现在,我尝试使用下面的查询重新使用“max”概念。但这对我的帮助不起作用。请让我知道您的意见,或者是否有更好的方法获得相同的结果

select System_Id, TeamProjectSK, System_State, max(System_Rev)
from
(select System_Id, TeamProjectSK, System_State, System_Rev
from
(
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev,
        row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn
    from dbo.DimWorkItem w1  
    where w1.System_Id = 1691  
) d
where rn = 1
) e
group by System_Id, TeamProjectSK, System_State
having max(System_Rev)>1

如果您只想返回带有max
System\u Rev
的行,则需要将
row\u number()
更改为仅按
System\u id
TeamProjectSK
进行分区。通过
System\u State
删除分区

select System_Id, TeamProjectSK, System_State, System_Rev
from
(
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev,
        row_number() over(partition by w1.System_Id, w1.TeamProjectSK order by w1.System_Rev desc) rn
    from dbo.DimWorkItem w1  
    where w1.System_Id = 1691  
) d
where rn = 1;

我想要一些不同的东西,但它很有帮助。它帮助我更好地理解了如何使用分区。
select System_Id, TeamProjectSK, System_State, System_Rev
from
(
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev,
    row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn
    from dbo.DimWorkItem w1  
    where w1.System_Id = 1691
) d
where rn = 1
and d.System_Rev = (select max(w2.System_Rev) from dbo.DimWorkItem w2 where w2.System_Id = d.System_Id)
order by System_Id, TeamProjectSK,System_Rev desc;