分组排序获取每组最新记录

mysql5.7版本上实现的,目前mysql8.0已经可以使用分析函数了,不需要那么麻烦了。

需求

一张表内有ID、时间、描述信息等,依据ID找出最新时间的一条描述信息。

分析

先按照ID进行分组,然后对时间进行倒序排序,选出最新的一条记录。

测试表结构

与实现有关的字段有task_id、dl_time、dl_dscr。

Mysql实现方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
*
FROM
dq_ld_log AS b
WHERE
NOT EXISTS (
SELECT
1
FROM
dq_dl_log
WHERE
task_id = b.task_id
AND b.dl_time < dl_time)
SELECT
*
FROM
( SELECT dl_time, task_id, dl_dscr FROM dq_dl_log GROUP BY task_id DESC ) t
ORDER BY
t.dl_time
Oracle实现方法
1
2
3
4
5
6
SELECT
row_number() over ( PARTITION BY task_id ORDER BY dl_time ) rank
FROM
dq_dl_log
WHERE
rank = 1