我有一个销售交易表,我被要求只报告在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和3应退回,因为事务处理6距离事务处理3超过12个月。
项目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个月内。
发布于 2017-07-03 15:20:58
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;发布于 2017-07-03 10:30:12
您可以获取在过去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
);您的问题不清楚您要如何处理此信息,但这将检索所有项。
发布于 2017-07-03 11:14:47
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())https://stackoverflow.com/questions/44876881
复制相似问题