问题:是否有一个SELECT查询只返回file_id=1和file_id=2,而忽略file_id=3
如果您使用的是MySQL 8.0,那么可以利用window函数
ROW_NUMBER()
SELECT x.file_id, x.version_id, x.filename
FROM (
SELECT t.*, ROW_NUMBER() OVER(PARTITION BY version_id ORDER BY file_id) rn
FROM master_logs.system_patches t
) x
WHERE x.rn = 1
内部查询为中的每个记录指定一个行号
version_id
file_id
,外部查询将筛选具有行号的记录
1
.
NOT EXISTS
SELECT t.file_id, t.version_id, t.filename
FROM master_logs.system_patches t
WHERE NOT EXISTS (
SELECT 1
FROM master_logs.system_patches t1
WHERE t1.version_id = t.version_id AND t1.file_id < t.file_id
)