【发布时间】:2022-11-04 02:19:47
【问题描述】:
架构详细信息
我们正在一个项目中维护集合数据。 Collections 表的主要列是id(INT)、collectionId(String UUID)、versionNo(INT)、status(PUBLISHED/NEW/PURCHASED/DELETED/ARCHIVED)。每个集合可以有多个版本。对于每个不同的版本,versionNo、id、status 列将具有不同的值,但 collectionId 将是相同的。
样本数据
id collectionId versionNo status
5 17af2c88-888d-4d9a-b7f0-dfcbac376434 1 PUBLISHED
80 17af2c88-888d-4d9a-b7f0-dfcbac376434 2 PUBLISHED
109 17af2c88-888d-4d9a-b7f0-dfcbac376434 3 NEW
6 d8451652-6b9e-426b-b883-dc8a96ec0010 1 PUBLISHED
问题陈述
我们想要获取最高发布版本的集合的详细信息。例如:对于上述数据集,所需的输出是
id collectionId versionNo status
80 17af2c88-888d-4d9a-b7f0-dfcbac376434 2 PUBLISHED
6 d8451652-6b9e-426b-b883-dc8a96ec0010 1 PUBLISHED
我们尝试了以下查询,但要么获取重复条目,要么仅获取单个版本的集合:
-
select * from Collections where status="PUBLISHED" group by collectionId having versionNo=max(versionNo); -
select T1.* from Collections T1 inner join Collections T2 on T1.collectionId = T2.collectionId AND T1.id <> T2.id where T1.status="PUBLISHED" AND T1.versionNo > T2.versionNo;更新: 我使用的是 MYSQL 版本 5.7.12。
【问题讨论】:
标签: mysql join group-by greatest-n-per-group