mysql - 从MySQL数据中获取最后的mod_date

标签 mysql sql greatest-n-per-group

我的数据库中有以下数据

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|1  | dede  |  1   |2012-11-07 01:04:26|
|2  | dede  |  10  |2012-11-07 01:05:42|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|4  | baba  |  23  |2012-11-07 05:22:50|
|5  | baba  |  35  |2012-11-07 08:06:57|
|6  | baba  |  50  |2012-11-08 06:32:13|
|7  | rara  |  43  |2012-11-13 06:40:35|

我想获取每个名称的最后更新 mod_date :

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|2  | dede  |  10  |2012-11-07 01:04:26|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|6  | baba  |  50  |2012-11-08 06:32:13|
|7  | rara  |  43  |2012-11-13 06:40:35|

我尝试了这个解决方案,但没有成功( same question )

SELECT no,name,exp,max(date) FROM skill_exp
GROUP BY name

我从该查询中得到了这个结果

|NO | name  |exp   | mod_date          | 
+---+-------+------+-------------------+
|1  | dede  |  1   |2012-11-07 01:05:42|
|3  | GoGo  |  20  |2012-11-07 03:05:40|
|4  | baba  |  23  |2012-11-07 05:22:50|
|7  | rara  |  43  |2012-11-13 06:40:35|

最佳答案

子查询背后的想法是,它分别获取每个名称的最新(最大值)mod_Date。然后将其结果连接回原始表以获得每行中的其他列。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT name, MAX(mod_date) maxDate
            FROM tableName
            GROUP BY name
        ) s ON  a.name = s.name AND
                a.mod_date = s.maxDate

关于mysql - 从MySQL数据中获取最后的mod_date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119166/

相关文章:

mysql - 黑洞引擎的创意用途

php - 最优化的 MySQL 语法

Mysql查询在两列的基础上动态将行转列

MySQL错误: You can't specify target table 'users_words' for update in FROM clause

sql - 从众多中仅选择最便宜或最昂贵的变体

php - MySQL 中数据库的最小值

SQL SELECT 列上具有最大值的行并返回所有列

mysql - 获取每组分组 SQL 结果中最大值的记录

mysql - 重复类型 id 的 COUNT MAX CASE 和 GROUP BY

PHP - 无法使用复选框删除 MySQL 行(无表单)