mysql - 选择一年中出现的次数少于/超过x个月的行

时间:2013-03-13 18:26:16

标签: mysql

我有一张产品销售表。每次销售都有物品代码(例如序列号)和日期。

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中做到吗?

3 个答案:

答案 0 :(得分:1)

SELECT item_code
FROM ProductSales
GROUP BY item_code
HAVING COUNT(DISTINCT MONTH(date)) >= @threshold

http://sqlfiddle.com/#!2/810c9/3

答案 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