如何编写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
相关产品推荐
相关产品推荐

