如何获取数据表中各identifier对应的最新记录?
获取每个identifier的最新条目(以ID为判断依据)
嘿,你选ID作为判断依据真的很明智——毕竟一般来说ID都是自增主键,相比created_at能更精准地判定最新条目(完全避免同一时间戳下多条数据的歧义问题)。下面给你两种实用的实现方案,适配不同的数据库环境:
方案一:子查询关联(通用型,适配绝大多数数据库)
这种方法先通过分组找出每个identifier对应的最大ID(也就是该分组下的最新条目ID),再和原表关联获取完整数据:
SELECT t.* FROM your_table t INNER JOIN ( SELECT identifier, MAX(ID) AS max_id FROM your_table GROUP BY identifier ) tm ON t.ID = tm.max_id
方案二:窗口函数(适合支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)
利用窗口函数按identifier分组,每组内按ID降序排序,取排序后第一条数据即可:
SELECT ID, identifier, data, created_at FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY identifier ORDER BY ID DESC) AS rn FROM your_table ) t WHERE rn = 1;
小贴士:如果你的业务场景中存在同一
identifier下ID相同的极端情况(不过主键ID一般不会重复),可以根据实际需求替换ROW_NUMBER()为RANK()或DENSE_RANK(),但通常前者就足够用了。
内容的提问来源于stack exchange,提问作者TheNiceGuy
相关产品推荐
相关产品推荐

