无法在SQL Server中使用group by获取所需的数据



我的一个表中有以下数据:

Id  subpartID     MainpartID    EngagementName  HashValue   Version CreatedDate ModifiedDate
--------------------------------------------------------------------------------------------
1   IN-2022         111112         name1         hash1        1     2022-05-26  NULL
2   IN-2022         111112         name2         hash2        2     2022-05-26  NULL
3   JP-2022         221112         name3         hash3        1     2022-05-26  NULL
4   JP-2022         221112         name4         hash4        2     2022-05-26  NULL
5   AU-2022         221112         name5         hash5        1     2022-05-26  NULL

我想从中获取记录。当我输入一个MainpartID = 111112时,我希望输出像这样:

Id  subpartID     MainpartID    EngagementName  HashValue   Version CreatedDate ModifiedDate
--------------------------------------------------------------------------------------------
2   IN-2022         111112         name2         hash2        2     2022-05-26  NULL

,当我输入MainpartID = 221112时,我希望输出看起来像这样:

Id  subpartID     MainpartID    EngagementName  HashValue   Version CreatedDate ModifiedDate
--------------------------------------------------------------------------------------------
4   JP-2022         221112         name4         hash4        2     2022-05-26  NULL
5   AU-2022         221112         name5         hash5        1     2022-05-26  NULL

这里的逻辑是,对于特定的MainpartID,获取所有subpartID,然后在最终输出中仅显示特定subpartID的最新版本。

我的代码是:
SELECT *
FROM egTable
WHERE egTable.[Version] = (SELECT MAX([Version]) 
FROM egTable 
WHERE MainpartID = '111112' 
GROUP BY subpartID) 

但这似乎不工作。

有人能帮我一下吗?数据是假的

我们可以尝试在这里使用ROW_NUMBER:

WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY MainpartID, subpartID
ORDER BY Version DESC) rn
FROM egTable
)
SELECT Id, subpartID, MainpartID, EngagementName, HashValue, Version,
CreatedDate, ModifiedDate
FROM cte
WHERE rn = 1
ORDER BY MainpartID, subpartID;

这与您构建它的方式相似,但您必须"关联"子查询,即您必须告诉子查询为特定的MainPartId和SubpartId运行。您还必须过滤主查询(如果您只想要一个MainPArtID):

SELECT *
FROM egTable egt1
WHERE egt1.MainPartId='111112'
and egt1.[Version] = (SELECT MAX([Version]) 
FROM egTable egt2
WHERE egt2.MainpartID = egt1.MainPartId
and egt2.SubPartID = egt1.SubPartID
) 

顺便说一下,每次运行不同MainPartID的查询时,您当然可以按照您所做的方式向子查询提供确切的MainPartID。

相关内容

  • 没有找到相关文章

最新更新