本文只是项目过程中暂时能想到的一种方法,如果你有其它实现方式,欢迎留言与我交流。
原始数据
| 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 表示从末尾截取一组字符(正数从开头开始截取;负数从末尾开始截取)。
关于这两个函数的更多使用方式,参见官方文档或搜索引擎。