mysql分组取最新一条记录

[toc]

mysql分组取最新一条记录

背景

mysql取分组中最新的一条记录,比如贴吧里面的每个贴吧最新的一条回复

SQL

测试数据:

id time_at status
1 2019/12/11 18:27 1
1 2019/12/10 18:27 2
1 2019/12/9 18:28 3
2 2019/12/11 18:28 4
2 2019/12/10 18:28 5
2 2019/12/9 18:28 6

方法1

与mysql版本有关(查询mysql版本:select version();

对于mysql 5.5版本

SELECT
    *
FROM
    (
        SELECT
            id,time_at,`status`
        FROM
            test
        ORDER BY
            time_at desc 
    ) t
where 1
GROUP BY
    t.id

对于mysql 5.7版本,需要加入limit限制,否则不生效

SELECT
    *
FROM
    (
        SELECT
            id,
            time_at,
            `status`
        FROM
            test
        ORDER BY
            time_at DESC
        LIMIT 20
    ) t
WHERE
    1
GROUP BY
    t.id

方法2

连表查询,实际上自己关联自己,然后其中一个表不符合条件的时候由于left join,所以第二张表的数据为null,最后将这些数据排除

SELECT
    m1.*
FROM
    test m1
LEFT JOIN test m2 ON (
    m1.id = m2.id
    AND m1.time_at < m2.time_at
)
WHERE
    m2.id IS NULL

结果

id time_at status
1 2019/12/11 18:27 1
2 2019/12/11 18:28 4

效率

实际使用上,使用方法1会比方法2会更快

本文作者:朝圣

本文链接:www.zh-noone.cn/2019/12/mysql分组取最新一条记录

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

python编码
0 条评论