MSSQL实现按代码聚合统计出现次数并展示对应最新录入的描述
解决方案:MSSQL按最新录入描述统计Code出现次数
你遇到的问题很典型——MAX(description)是按字符串字典序取最大值,而不是按录入顺序(id)取最新的描述。要实现需求,核心是先找到每个code对应的最大id(最新录入记录),再关联获取对应的描述,最后结合统计次数。
下面是两种可靠的MSSQL实现方案:
方法一:子查询关联最大ID
这种方式逻辑直观,先统计每个code的出现次数,再关联到对应code的最新记录:
SELECT t.description, cnt.value FROM ( -- 先统计每个code的总次数 SELECT code, COUNT(*) AS value FROM your_table -- 替换成你的表名 GROUP BY code ) cnt -- 关联原表,找到每个code对应最大id的记录 JOIN your_table t ON cnt.code = t.code WHERE t.id = (SELECT MAX(id) FROM your_table WHERE code = cnt.code) ORDER BY cnt.value DESC;
方法二:窗口函数标记最新记录
用ROW_NUMBER()窗口函数给每个code的记录按id降序排名,排名为1的就是最新记录,再和统计结果关联:
WITH RankedDescriptions AS ( -- 给每个code的记录按id降序排名,rn=1是最新的 SELECT id, code, description, ROW_NUMBER() OVER (PARTITION BY code ORDER BY id DESC) AS rn FROM your_table -- 替换成你的表名 ), CodeCounts AS ( -- 统计每个code的总次数 SELECT code, COUNT(*) AS value FROM your_table GROUP BY code ) -- 关联最新描述和统计结果 SELECT rd.description, cc.value FROM CodeCounts cc JOIN RankedDescriptions rd ON cc.code = rd.code WHERE rd.rn = 1 ORDER BY cc.value DESC;
为什么这两种方法可行?
两种方案都是通过id的最大值来锁定最新录入的描述,完全避开了字符串排序的干扰,确保拿到的是用户最后录入的正确描述。
内容的提问来源于stack exchange,提问作者Patrick Conwell
相关产品推荐
相关产品推荐

