[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会更快