从MySQL获取每个人的最新记录
我有一张这样的桌子从MySQL获取每个人的最新记录,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我有一张这样的桌子 ╔════╦════════╦═════════════╦═════════════════╗ ║ PK ║ NAME ║ DEGREE ║ YEAR_OF_PASSING ║ ╠════╬════════╬═════════════╬═════════════════╣ ║ 1 ║ Shrey ║ B.E. ║ 2004 ║ ║ 2 ║ Shrey ║ High School ║ 2000 ║
╔════╦════════╦═════════════╦═════════════════╗
║ PK ║ NAME ║ DEGREE ║ YEAR_OF_PASSING ║
╠════╬════════╬═════════════╬═════════════════╣
║ 1 ║ Shrey ║ B.E. ║ 2004 ║
║ 2 ║ Shrey ║ High School ║ 2000 ║
║ 3 ║ Gaurav ║ B.E. ║ 2000 ║
║ 4 ║ Gaurav ║ M.Sc. ║ 2002 ║
╚════╩════════╩═════════════╩═════════════════╝
如何查询以获得每个人的最新学位的结果集,如下所示
╔════╦════════╦════════╦═════════════════╗
║ PK ║ NAME ║ DEGREE ║ YEAR_OF_PASSING ║
╠════╬════════╬════════╬═════════════════╣
║ 1 ║ Shrey ║ B.E. ║ 2004 ║
║ 4 ║ Gaurav ║ M.Sc. ║ 2002 ║
╚════╩════════╩════════╩═════════════════╝
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT Name, MAX(Year_Of_Passing) max_val, MAX(PK) max_pk
FROM tableName
GROUP BY Name
) b ON a.name = b.name AND
CASE WHEN b.max_val IS NULL
THEN a.pk = max_PK
ELSE a.Year_Of_Passing = b.max_val
END
选择PK、Name、Degree、MAX(通过的年)作为TableName组通过的年,按PK的名称顺序代码>提供完全相同的输出。它们是等价的吗?@Shrey基本上不是。如果您尝试在任何其他服务器上运行该查询,该查询将生成一个错误。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT Name, MAX(Year_Of_Passing) max_val, MAX(PK) max_pk
FROM tableName
GROUP BY Name
) b ON a.name = b.name AND
CASE WHEN b.max_val IS NULL
THEN a.pk = max_PK
ELSE a.Year_Of_Passing = b.max_val
END