MySQL如何查询最新审核过的一条数据

本文只是项目过程中暂时能想到的一种方法,如果你有其它实现方式,欢迎留言与我交流。

原始数据

id(主键) organization_id audit_time(审核时间)
2orejelw5td3bwfkv 2oo2v3mqwrd832efh 2021-06-02 15:23:37
2or7zo75ygc7fi2l7 2oo2v3mqwrd832efh 2021-07-02 15:23:37
2or81tr5evpean60d 202106171149548es5ntrhd 2021-06-19 11:12:16
2or81tt1m5rnw1h0o 202106171149548es5ntrhd 2021-05-19 11:57:00
2or96z2524ac1zw0v 202106171149548es5ntrhd 2021-07-09 13:31:00

目标描述:针对每个 organization_id, 根据审核时间,获取最新审核的一条数据

预期结果

id(主键) organization_id audit_time(审核时间)
2or7zo75ygc7fi2l7 2oo2v3mqwrd832efh 2021-07-02 15:23:37
2or96z2524ac1zw0v 202106171149548es5ntrhd 2021-07-09 13:31:00

完整 SQL 如下:

1
2
3
4
5
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY audit_time),',',-1) AS id,
organization_id
FROM organization_auth_request
GROUP BY organization_id

关键点说明:

  • GROUP_CONCAT(id ORDER BY audit_time) 分组后拼接的时候,可以指定排序字段和排序方式,以确保能够按照指定顺序拼接
  • SUBSTRING_INDEX('待截取的字符串',',',-1)
    • 第一个参数是待截取的字符串;
    • 第二个参数是截取时以什么字符分组,比如这里是以 , 分组;
    • 第三个参数是截取方向和个数,-1 表示从末尾截取一组字符(正数从开头开始截取;负数从末尾开始截取)。

关于这两个函数的更多使用方式,参见官方文档或搜索引擎。