SQL QUERY 计算 2 个条件下的重复次数

SQL QUERY to count repeats with 2 conditions

只有在满足两个条件时才查找重复项。在此示例中,仅当每个 customer_id 的订单大小为 "Big" 且其对应日期早于其他实例时,才对每个 customer_id 的项目类型进行重复计数。使用此代码可以实现第一个条件和重复。

Select Customer_id, Item_Type, COUNT(*) 
from table 
group by Customer_id, Item_Type
having count(*) > 1 and sum(case when Order_Size = 'Big' then 1 else 0 end) > 0; 

如何将日期方面也包括在内?

我相信您可以在子查询中使用 window 函数来决定要计算哪些行,然后在主查询中对它们进行计数。类似于:

Select
    customer_id, item_type, sum(count_pass) as Count
FROM
    (
        Select Customer_id, 
            Item_Type, 
            CASE 
                WHEN Order_Size = 'Big' THEN 0 
                WHEN MIN(Order_Size) OVER (PARTITION BY Customer_ID, Item_Type ORDER BY DateField ASC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) = 'BIG' THEN 1 
                ELSE 0
                END as count_pass
        FROM table
    ) subqry
GROUP BY 1,2

那个大案例语句分解如下:

  1. 如果这条记录是'Big'则忽略它
  2. 如果您按日期对每组 customer_id/item_type 的所有记录进行排序,并查看该记录之前的所有记录,以及该组中的 min(order_size)记录(按字典顺序排序)是 'Big' 然后你有一个大的前一个日期并且可以计算这条记录
  3. 不然……你数不过来。这只是带有 order_size='small' 而没有前面的 'big' 的记录。

我会这样做:

select t.customer_id, t.item_type, count(*)
from (select t.*,
             min(case when OrderSize = 'Big' then date end) over (partition by customer_id, item_type) as min_big
      from t
     ) t
where date > min_big
group by t.customer_id, t.item_type;