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

如何编写SQL查询返回同分类下所有产品日期一致的销售数据

解决SQL查询:筛选同一分类下所有产品日期完全相同的记录

你的原查询逻辑偏离了需求——它找的是「某个分类+日期组合下仅对应单个产品」的日期,这和你要的「整个分类里所有产品的日期完全一致」完全不是一回事。

正确解法一:分组筛选合法分类后关联原表

SELECT s.*
FROM sales s
INNER JOIN (
    -- 找出所有记录日期完全统一的分类
    SELECT assortment
    FROM sales
    GROUP BY assortment
    HAVING MIN(date) = MAX(date)
) valid_categories ON s.assortment = valid_categories.assortment
ORDER BY s.assortment, s.product_number, s.date;

逻辑说明:子查询通过MIN(date) = MAX(date)判断分类下所有日期是否完全相同,只有满足这个条件的分类,其所有记录才会被保留并返回。

正确解法二:用窗口函数标记合法记录

SELECT product_number, assortment, date
FROM (
    SELECT *,
           MIN(date) OVER (PARTITION BY assortment) AS category_min_date,
           MAX(date) OVER (PARTITION BY assortment) AS category_max_date
    FROM sales
) temp
WHERE category_min_date = category_max_date
ORDER BY assortment, product_number, date;

逻辑说明:窗口函数为每条记录计算其所属分类的最小/最大日期,筛选出两类日期相等的记录,也就是所属分类下所有日期一致的记录。

用你的示例数据测试的话,这两种方法都会返回chocolate分类的所有记录,排除chips分类的记录,和预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:40:33