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

SQL Server按日期和商品分组求最大最小采购量及对应采购方

解决SQL Server分组取采购量最高/最低采购方的问题

针对你的需求,我们可以利用窗口函数高效实现按DATE和ITEM分组,提取每组采购量最高、最低的采购方及对应数量。以下是两种适用于不同场景的解决方案:

场景1:每组最高/最低采购量唯一(或只需取任意一个)

如果每组的最高/最低采购量对应的采购方只有一个,或者你只需要返回其中一个,可使用ROW_NUMBER()窗口函数:

WITH RankedData AS (
    SELECT 
        DATE,
        ITEM,
        BUYER,
        QTY_BUY,
        -- 按采购量降序排名,排名1即为该组最高采购量记录
        ROW_NUMBER() OVER (PARTITION BY DATE, ITEM ORDER BY QTY_BUY DESC) AS rn_top,
        -- 按采购量升序排名,排名1即为该组最低采购量记录
        ROW_NUMBER() OVER (PARTITION BY DATE, ITEM ORDER BY QTY_BUY ASC) AS rn_min
    FROM PurchaseData -- 替换为你的实际表名
)
SELECT 
    t.DATE,
    t.ITEM,
    t.BUYER AS TOP_BUYER,
    t.QTY_BUY AS TOP_QTY,
    m.BUYER AS MIN_BUYER,
    m.QTY_BUY AS QTY_MIN
FROM RankedData t
INNER JOIN RankedData m 
    ON t.DATE = m.DATE 
    AND t.ITEM = m.ITEM 
    AND t.rn_top = 1 
    AND m.rn_min = 1
GROUP BY t.DATE, t.ITEM, t.BUYER, t.QTY_BUY, m.BUYER, m.QTY_BUY;

场景2:存在多个采购方拥有相同最高/最低采购量

如果同一组内有多个采购方采购量相同且为最高/最低,可使用DENSE_RANK()结合STRING_AGG()将所有对应采购方合并展示:

WITH RankedData AS (
    SELECT 
        DATE,
        ITEM,
        BUYER,
        QTY_BUY,
        DENSE_RANK() OVER (PARTITION BY DATE, ITEM ORDER BY QTY_BUY DESC) AS rn_top,
        DENSE_RANK() OVER (PARTITION BY DATE, ITEM ORDER BY QTY_BUY ASC) AS rn_min
    FROM PurchaseData -- 替换为你的实际表名
)
SELECT 
    DATE,
    ITEM,
    STRING_AGG(CASE WHEN rn_top = 1 THEN BUYER END, ', ') AS TOP_BUYER,
    MAX(CASE WHEN rn_top = 1 THEN QTY_BUY END) AS TOP_QTY,
    STRING_AGG(CASE WHEN rn_min = 1 THEN BUYER END, ', ') AS MIN_BUYER,
    MIN(CASE WHEN rn_min = 1 THEN QTY_BUY END) AS QTY_MIN
FROM RankedData
GROUP BY DATE, ITEM;

关键说明

  • PARTITION BY DATE, ITEM:指定分组依据,确保排名仅在同一日期、同一商品组内进行。
  • ROW_NUMBER():给每条记录分配唯一排名,若存在相同采购量,排名会随机分配(适合只需要单个结果的场景)。
  • DENSE_RANK():相同采购量会获得相同排名,配合STRING_AGG()可将所有并列的采购方用逗号分隔合并显示。

内容的提问来源于stack exchange,提问作者Andi Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:05:26