如何通过SQL按分组获取最大date_to并返回对应单条记录
解决方法
你的问题出在原SQL的分组逻辑上——把p.date_to放进了GROUP BY里,导致每个不同的任职结束日期都会单独生成一条记录,MAX函数根本起不到筛选最大日期的作用。下面给你两种通用的解决方案:
方法一:用窗口函数(推荐,支持多数现代数据库)
通过给每条记录按p.date_to降序排名,直接取排名第一的那条就是最新的任职记录:
WITH ranked_positions AS ( SELECT r.resource_id, r.date_from AS 'Resource Date From', r.date_to AS 'Resource Date To', p.post_id, p.date_from AS 'Position Date From', p.date_to AS 'Position Date To', -- 按任职结束日期倒序排名,最新的排第1 ROW_NUMBER() OVER (ORDER BY p.date_to DESC) AS rn FROM ahsresources r INNER JOIN aprresourcepost p ON r.resource_id = p.resource_id AND r.client = p.client WHERE r.resource_typ = 'E' AND r.resource_id = '10-1002595' ) SELECT resource_id, `Resource Date From`, `Resource Date To`, post_id, `Position Date From`, `Position Date To` FROM ranked_positions WHERE rn = 1;
方法二:子查询找最大日期再关联(兼容老版本数据库)
先查询出目标人员的最大任职结束日期,再关联原表筛选对应记录:
SELECT r.resource_id, r.date_from AS 'Resource Date From', r.date_to AS 'Resource Date To', p.post_id, p.date_from AS 'Position Date From', p.date_to AS 'Position Date To' FROM ahsresources r INNER JOIN aprresourcepost p ON r.resource_id = p.resource_id AND r.client = p.client WHERE r.resource_typ = 'E' AND r.resource_id = '10-1002595' AND p.date_to = ( SELECT MAX(date_to) FROM aprresourcepost WHERE resource_id = '10-1002595' AND client = r.client );
内容的提问来源于stack exchange,提问作者Jon Simmonds
相关产品推荐
相关产品推荐

