Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL获取每个人的最新记录_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

从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 ║
╚════╩════════╩════════╩═════════════════╝
更新1

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

非常感谢JW.,有些情况下,通过的年份=null,那么我可以拥有最高PK的记录吗?谢谢JW。我发现这个查询
选择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