You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Microsoft SQL筛选各编号下最高customer_confidence的记录?

解决Microsoft SQL中按编号取最高客户置信度记录的问题

问题分析

你需要实现的是按编号(no)分组,返回每组中customer_confidence最高的完整记录,对应两种场景:

  • 场景1:同一编号+同一客户有多条置信度记录,取最高值的那条
  • 场景2:同一编号下有多个客户,取置信度最高的那个客户的记录

你之前尝试的语句存在逻辑问题:distinct搭配max()的写法不成立,要么会因聚合函数缺少group by报错,即便加了group by no, customer,也会返回所有no+customer的组合,无法实现“仅取每组最高置信度”的需求。

解决方案:使用窗口函数ROW_NUMBER()

在Microsoft SQL Server中,最简洁高效的方式是用ROW_NUMBER()窗口函数,按编号分组后排序筛选:

WITH ranked_records AS (
    SELECT 
        no,
        customer,
        customer_confidence,
        -- 按no分组,组内按置信度降序排序,最高值的行号标记为1
        ROW_NUMBER() OVER (PARTITION BY no ORDER BY customer_confidence DESC) AS rn
    FROM your_table_name -- 替换为你的实际表名
)
SELECT no, customer, customer_confidence
FROM ranked_records
WHERE rn = 1;

代码说明

  • PARTITION BY no:将数据按编号拆分为独立分组
  • ORDER BY customer_confidence DESC:每个分组内按置信度从高到低排序
  • ROW_NUMBER():为分组内的每行分配序号,最高置信度的行序号为1
  • 最后筛选rn=1的记录,就是每个编号下置信度最高的那条

特殊情况处理(可选)

如果存在同一编号下多个客户置信度相同且均为最高值,可按需调整:

  • 若要返回所有最高置信度的记录,将ROW_NUMBER()替换为RANK()或DENSE_RANK()
  • 若要指定优先级(比如按客户编号排序),可在ORDER BY后追加customer ASC或DESC

内容的提问来源于stack exchange,提问作者N K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:50:22