如何编写SQL语句获取表中指定Name对应的最新记录
获取指定Name的最新记录行解决方案
这里有几种实用的SQL写法来实现你的需求,你可以根据自己使用的数据库类型选择:
方法1:子查询关联(通用型,兼容大多数数据库)
这种方法通过子查询先找出Tim和Jeff各自的最新时间戳,再关联原表拿到完整记录:
SELECT t.id, t.Name, t.time FROM your_table t INNER JOIN ( -- 先筛选目标Name,拿到每个Name的最大time SELECT Name, MAX(time) AS latest_time FROM your_table WHERE Name IN ('Tim', 'Jeff') GROUP BY Name ) sub ON t.Name = sub.Name AND t.time = sub.latest_time;
说明:
- 如果同一个Name存在同一时间戳的多条记录(虽然epoch时间戳重复概率低,但也有可能),这个语句会返回所有符合条件的行。
- 如果你希望在这种情况下只返回其中一行(比如取最大id的那条),可以把子查询里的
MAX(time)改成MAX(id),然后关联条件换成t.id = sub.max_id,同时子查询里要GROUP BY Name取最大id。
方法2:窗口函数(适合支持窗口函数的数据库,如MySQL 8+、PostgreSQL、SQL Server等)
窗口函数可以更直观地给每组记录排序,直接取最新的那条:
SELECT id, Name, time FROM ( SELECT id, Name, time, -- 按Name分组,每组内按time降序排,给每行标序号 ROW_NUMBER() OVER (PARTITION BY Name ORDER BY time DESC) AS rn FROM your_table WHERE Name IN ('Tim', 'Jeff') ) ranked WHERE rn = 1;
说明:
ROW_NUMBER()会给每组内的记录按time降序分配唯一序号,rn=1就是最新的那条。- 如果想保留同一时间戳的所有最新记录,把
ROW_NUMBER()换成RANK()或者DENSE_RANK()即可。
注意:记得把代码里的your_table替换成你实际使用的表名哦!
内容的提问来源于stack exchange,提问作者HurkNburkS
相关产品推荐
相关产品推荐

