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

如何按CustomerCode分组,筛选TOP(nbServer-nbImaging)条数据?

解决方案

可以通过ROW_NUMBER()窗口函数结合CTE实现需求,具体步骤如下:

  1. 先保留原有查询逻辑生成基础数据集
  2. 给每个CustomerCode分组内的记录添加行号,同时计算需要提取的条数TakeCount(即nbServer - nbImaging)
  3. 外层筛选行号不超过TakeCount的记录,同时过滤掉差值为负的情况(避免取到无效数据)

完整SQL语句如下:

WITH BaseData AS (
    SELECT  
        CustomerCode,
        SUBSTRING(SerialNumber, CHARINDEX('-', SerialNumber) + 1, 6) AS SerialNumber,
        nbServer,
        ISNULL(nbImaging, 0) AS nbImaging
    FROM 
        Magic
    WHERE 
        CS_MagicNUmber <> I_MagicNumber
        OR CS_MagicNUmber IS NULL
        OR I_MagicNUmber IS NULL
),
RankedData AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY CustomerCode ORDER BY SerialNumber) AS RowNum,
        (nbServer - nbImaging) AS TakeCount
    FROM BaseData
)
SELECT 
    CustomerCode,
    SerialNumber,
    nbServer,
    nbImaging
FROM RankedData
WHERE RowNum <= TakeCount
  AND TakeCount > 0;

关键说明

  • PARTITION BY CustomerCode:确保行号按客户分组单独计算
  • ORDER BY SerialNumber:明确分组内的排序规则(可根据实际业务需求替换为其他字段,如创建时间等)
  • TakeCount > 0:避免当nbServer小于nbImaging时,错误提取数据

内容的提问来源于stack exchange,提问作者Jean-Cédric Hamel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:47:53