2013-06-05 33 views
0

我有下面的查询 -最大列概念... SQL服务器

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_Rev行“价值&它应该看起来像 -

System_Id TeamProjectSK System_State System_Rev 
1691   126    Closed    17 

现在,我试图重新使用‘使用贝罗最大’的概念w查询。但这对我的帮助不起作用。请让我知道您的意见或者是否有更好的方法来获得相同的结果。

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 

回答

0

如果你只是想和最大System_Rev返回该行,那么你需要改变row_number()System_id,只有TeamProjectSK分区。以System_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; 

SQL Fiddle with Demo

+0

我想要的东西不同,但它帮助。它帮助我理解如何更好地使用分区。 – 0nir

0
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; 
+0

谢谢..帮助。 – 0nir