1

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

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 月份售出两次,一次在 6 月,一次在 7 月。“b”部分在 2 月和 4 月出售一次。然后 c 部分在 3 月份出售一次。

我想返回所有已售零件的列表,例如,一年中 2 个月或更长时间。所以这将返回部分“a”和“b”。如果我将该阈值提高到一年中 >=3 个月,它只会返回“a”部分。哪个月没关系。但“a”部分出现在 3 个不同的月份,因此得分为 3。“b”部分得分为 2。

我当然可以用 PHP 来处理这个问题,但我可以纯粹在 mysql 中完成吗?

4

3 回答 3

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

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

于 2013-03-13T18:30:44.587 回答
1

你可以做这样的事情。

SELECT item_code, COUNT(distinct MONTH(date)) as month_count from product_sales
GROUP BY item_code
HAVING month_count > 1
于 2013-03-13T18:31:34.793 回答
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
于 2013-03-13T18:42:41.670 回答