我有一张产品销售表。每次销售都有物品代码(例如序列号)和日期。
item_code | date
a | 2013-01-01
a | 2013-01-18
b | 3013-02-10
c | 2013-03-05
b | 2013-04-09
a | 2013-06-04
a | 2013-07-22
根据这些数据,我可以看到零件代码'a'在1月份出售两次,一次出现在六月,一次出现在七月。部分'b'在feb中出售一次,在4月出售一次。然后部分c在3月份出售一次。
我想返回所有销售部件的清单,例如,在一年中的2个月或更长时间内。所以这将返回部分'a'和'b'。如果我将该阈值提高到> = 3个月,那么它只返回'a'部分。几个月没关系。但是'a'部分发生在3个不同的月份,因此得分为3.部分'b',得分为2。
我当然可以用PHP来处理这个问题,但是我可以纯粹在mysql中做到吗?
答案 0 :(得分:1)
SELECT item_code
FROM ProductSales
GROUP BY item_code
HAVING COUNT(DISTINCT MONTH(date)) >= @threshold
答案 1 :(得分:1)
你可以这样做。
SELECT item_code, COUNT(distinct MONTH(date)) as month_count from product_sales
GROUP BY item_code
HAVING month_count > 1
答案 2 :(得分:0)
SELECT
pc.*,
count(lpc.item_code) AS TCount
FROM product_sales as pc
INNER JOIN product_sales AS lpc ON lpc.item_code = pc.item_code
GROUP BY pc.item_code
HAVING TCount >= 2