首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -如何查询12个月内售出的商品

mysql -如何查询12个月内售出的商品
EN

Stack Overflow用户
提问于 2017-07-03 10:12:31
回答 3查看 192关注 0票数 1

我有一个销售交易表,我被要求只报告在12个月内有两次销售的项目。例如:

代码语言:javascript
复制
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和3应退回,因为事务处理6距离事务处理3超过12个月。

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

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

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

代码语言:javascript
复制
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个月内。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-03 15:20:58

代码语言:javascript
复制
SELECT DISTINCT x.* 
           FROM my_table x 
           JOIN my_table y 
             ON y.id <> x.id 
            AND y.item = x.item 
            AND DATEDIFF(GREATEST(y.sale_date,x.sale_date),LEAST(y.sale_date,x.sale_date)) < 365;
票数 1
EN

Stack Overflow用户

发布于 2017-07-03 10:30:12

您可以获取在过去12个月内进行过销售的商品列表:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-07-03 11:14:47

代码语言:javascript
复制
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())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44876881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档