我需要在对应列上获取最多另一列的

时间:2016-03-08 08:30:38

标签: tsql

ContractId  ParentId    VersionNo
32388437    NULL         0
32388439    2884617      1
32617644    2884617      2
33572734    2884617      3

我刚刚开始使用SQL。 我需要一个查询来从特定的表返回最大列versionNo的ContractId。你可以帮帮我吗?

SELECT  MAX(VersionNo),ISNULL(ParentId,ContractId) 
FROM table1 
WHERE ParentId=ParentId GROUP by  ISNULL(ParentId,ContractId)

该查询不返回列VersionNo具有Null

的行

3 个答案:

答案 0 :(得分:2)

使用CTE的另一个答案

WITH max_cte AS 
( SELECT t.ContractId
       , t.ParentId
       , ROW_NUMBER() OVER (PARTITION BY t.ParentId ORDER BY t.VersionNo DESC) AS 'MaxVersion'
    FROM table1 AS t
)
SELECT ContractId
     , ParentId
  FROM max_cte 
 WHERE MaxVersion = 1;

答案 1 :(得分:1)

select  ParentId,ContractId,VersionNo 
from
( 
select ParentId,ContractId,VersionNo, max(VersionNo) Over(partition by ParentId) maxvers
from table1
) x
where VersionNo=maxvers

答案 2 :(得分:0)

select  ISNULL(ParentId,ContractId)--,ContractId,VersionNo 
from
( 
select ParentId,ContractId,VersionNo, max(VersionNo) Over(partition by ParentId) maxvers, EndDate
from table1
) x
where  VersionNo=maxvers

基于answer by Jayvee