MS Access SQL中GROUP BY场景下获取最大ID对应文本字段的问题
MS Access SQL 获取分组内最大ID对应文本的解决方法
为什么Last()函数失效?
Access的Last()函数并非按分组内的ID排序取最后一条,它返回的是数据表物理存储顺序里最后出现的记录字段值,这个顺序和ID自增、插入顺序不一定匹配,分组操作也不会改变它的取值逻辑,所以自然无法对应MAX(id)的那条记录。
正确实现方法
方法一:关联子查询匹配最大ID
直接判断每条记录是否为对应client的最大ID记录:
SELECT s.id, s.text, s.client FROM sms s WHERE s.id = ( SELECT MAX(id) FROM sms WHERE client = s.client );
方法二:先分组取最大ID再关联原表
先按client分组拿到每组最大ID,再通过ID关联原表获取对应文本:
SELECT g.max_id, s.text, g.client FROM ( SELECT client, MAX(id) AS max_id FROM sms GROUP BY client ) g INNER JOIN sms s ON g.max_id = s.id AND g.client = s.client;
你之前的子查询失败原因
你之前的写法里,idm是外层查询的别名,Access SQL不支持在同层级子查询中直接引用这个别名,因此触发语法错误,上面两种方法都规避了这个问题。
内容的提问来源于stack exchange,提问作者Noam Smadja
相关产品推荐
相关产品推荐

