如何查询每个客户最后插入的记录 现有GROUP BY查询结果不符合预期
你当前使用的SQL语句无法得到预期结果,核心原因是GROUP BY customer在未搭配对应聚合函数时,会默认返回每个客户分组下的第一条匹配记录,而非按id倒序的最新插入记录。
方案1:支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等通用写法)
用ROW_NUMBER窗口函数给每个客户的记录按id倒序编号,取每组编号为1的记录即可:
SELECT id, customer AS Name, value FROM ( SELECT id, customer, value, ROW_NUMBER() OVER (PARTITION BY customer ORDER BY id DESC) AS rn FROM customer ) AS temp WHERE rn = 1 ORDER BY id;
方案2:低版本MySQL兼容写法
先通过子查询拿到每个客户对应的最大id(即最新插入记录的id),再关联原表取完整字段:
SELECT c.id, c.customer AS Name, c.value FROM customer c INNER JOIN ( SELECT MAX(id) AS latest_id FROM customer GROUP BY customer ) AS latest ON c.id = latest.latest_id ORDER BY c.id;
两种写法最终输出都和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者Anju L S
相关产品推荐
相关产品推荐

