mysql - 如何查询彼此在12个月内销售的商品

时间:2017-07-03 02:12:31

标签: mysql sql

我有一张销售交易表,我被要求仅报告在12个月内有两次销售的物品。例如:

id | Item | Sale Date
---------------------
1  |  A  | 2017-02-03
2  |  C  | 2016-05-04
3  |  A  | 2016-08-23
4  |  B  | 2016-03-25
5  |  D  | 2015-07-30
6  |  A  | 2013-04-19
7  |  E  | 2011-03-12
8  |  B  | 2017-05-20
9  |  E  | 2011-05-04

项目A有三个销售记录,但只有交易1&由于交易6超过交易3的12个月,因此应返回3。

项目B有两次销售,但相隔超过12个月,因此应排除。

项目E在12个月内有两次销售,因此应包括在内。

我用它来查找多个销售的条目:

SELECT * FROM salesdata.sales
INNER JOIN
    (SELECT Item_Code, COUNT(*) c from salesdata.sales
    GROUP BY Item_Code HAVING c > 1)  as vals
ON sales.Item_Code = vals.Item_Code;

但无法弄清楚如何测试一件物品的两个销售额是否在12个月之内。

3 个答案:

答案 0 :(得分:1)

您可以获取在过去12个月内销售的商品清单:

select s.*
from salesdata.sales s
where exists (select 1
              from salesdata s2
              where s2.item_code = s.item_code and
                    s2.sale_date >= s.sale_date - interval 1 year and
                    s2.sale_date < s.sale_date
             );

您的问题不清楚您要对此信息做什么,但这会检索所有项目。

答案 1 :(得分:1)

<script src="/static/d3min.js" href="{{ url_for('static', filename='d3min.js') }}""></script>

        <script type="text/javascript"charset="utf-8">
            d3.text("/static/output.csv", function(data)

答案 2 :(得分:0)

SELECT s.*
from salesdata.sales s
INNER JOIN (
SELECT COUNT(item), item
FROM salesdata.sales
WHERE Sale Date >= DATEADD(year, -1, GETDATE())
GROUP BY item
HAVING COUNT(item) > 1
) b
on s.item = b.item
and s.Sale Date >= DATEADD(year, -1, GETDATE())