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

如何查询各Store ID每日最大总数量及对应日期?SQL去重求助

问题分析与修正方案

原SQL的两处核心问题

  1. 子查询分组错误:子查询里GROUP BY time, storeid, Quantity多了Quantity字段。你要计算的是门店每日总数量,应该只按日期(或时间)和门店分组,加了Quantity会把同一门店同一时间下,不同数量值的记录拆分开统计,导致qty_sum根本不是当日该门店的总数量,而是相同Quantity值的小计,完全偏离需求。
  2. 外层分组逻辑不符合需求:外层按日期+门店分组,输出的是每个门店每天的总数量,自然会出现重复的Store ID(一个门店有多少天数据就会出现多少次),这和你要“每个Store ID只返回最大日总量及对应日期”的需求不匹配。

修正后的SQL(SQL Server环境)

WITH daily_store_total AS (
    -- 第一步:正确计算每个门店每日的总数量
    SELECT 
        CONVERT(date, Time) AS store_date,
        storeid,
        SUM(quantity) AS daily_qty_sum
    FROM table1
    GROUP BY CONVERT(date, Time), storeid
),
ranked_daily_total AS (
    -- 第二步:对每个门店的日总量按从高到低排名
    SELECT 
        store_date,
        storeid,
        daily_qty_sum,
        ROW_NUMBER() OVER (PARTITION BY storeid ORDER BY daily_qty_sum DESC) AS rn
    FROM daily_store_total
)
-- 第三步:筛选出每个门店排名第一的记录(即日总量最大的那条)
SELECT store_date, storeid, daily_qty_sum
FROM ranked_daily_total
WHERE rn = 1
ORDER BY daily_qty_sum DESC;

补充说明

  • 用CONVERT(date, Time)替代你原来的dateadd(dd,0,datediff(dd,0,Time)),功能完全一致,写法更简洁。
  • 如果某个门店有多个日期的总数量并列最大,上面的SQL只会返回其中一条;如果需要返回所有并列的日期,把ROW_NUMBER()换成RANK()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:38:21