如何在SQL Server中获取指定id_contacto的最新步骤记录?
解决SQL Server查询最新步骤记录的问题
你的查询返回空结果的原因是:子查询SELECT MAX(FECHA) FROM step取的是整个step表的最大FECHA值,而非id_contacto=680的记录中的最大FECHA。如果该联系人的最新操作时间不是全表最晚的,自然匹配不到结果。
以下是几种正确的写法,按需选择:
方法1:修正子查询条件
给子查询加上id_contacto的过滤,确保取的是目标联系人的最大时间:
SELECT FECHA, id_contacto FROM step WHERE id_contacto = 680 AND FECHA = (SELECT MAX(FECHA) FROM step WHERE id_contacto = 680);
方法2:用TOP 1 + 排序(最简洁)
SQL Server支持直接取排序后的第一条记录,适合单条最新记录的场景:
SELECT TOP 1 FECHA, id_contacto FROM step WHERE id_contacto = 680 ORDER BY FECHA DESC;
方法3:窗口函数(适合复杂场景)
如果需要给多个联系人同时取最新记录,或者存在相同最大FECHA的多条记录时,用ROW_NUMBER()窗口函数更灵活:
SELECT FECHA, id_contacto FROM ( SELECT FECHA, id_contacto, ROW_NUMBER() OVER (PARTITION BY id_contacto ORDER BY FECHA DESC) AS rn FROM step WHERE id_contacto = 680 ) AS sub_query WHERE rn = 1;
内容的提问来源于stack exchange,提问作者Motias
相关产品推荐
相关产品推荐

