如何查询每个num对应的最新更新的code记录
实现方案
假设你的数据表名为your_table,可根据你使用的数据库版本选择以下两种实现方式:
方式1:窗口函数方案(支持MySQL 8.0+、PostgreSQL、Oracle、SQL Server等新数据库)
用ROW_NUMBER()按num分组后对created倒序排序,取每组排名第一的记录即可:
SELECT num, code, created FROM ( SELECT num, code, created, ROW_NUMBER() OVER(PARTITION BY num ORDER BY created DESC) AS rank_num FROM your_table ) AS temp WHERE rank_num = 1;
如果存在同一个num多条记录created完全相同的情况,把ROW_NUMBER()替换为RANK()可以保留所有最新时间的记录。
方式2:关联子查询方案(兼容所有数据库版本,包括MySQL 5.x等不支持窗口函数的旧版本)
先查出每个num对应的最大更新时间,再关联原表匹配对应的code值:
SELECT t1.num, t1.code, t1.created FROM your_table t1 JOIN ( SELECT num, MAX(created) AS latest_created FROM your_table GROUP BY num ) t2 ON t1.num = t2.num AND t1.created = t2.latest_created;
对应你的示例数据,最终查询结果如下:
| num | code | created |
|---|---|---|
| 778951 | 1112234 | 2021-05-13 |
| 123446 | 2354656 | 2021-05-26 |
| 235487 | 1232546 | 2021-05-03 |
内容的提问来源于stack exchange,提问作者pGh
相关产品推荐
相关产品推荐

