在2017年购买但在2016年没有购买的客户

时间:2018-01-11 22:32:44

标签: sql oracle

我有2个表:客户,订单 如何在2017年找到所有购买ìtem='A'或item ='B'的客户,但在2016年没有购买任何商品='A'或商品='B'。

SQL怎么样?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

这将是:

SELECT c.id
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id
WHERE o.item IN ('A', 'B')
AND YEAR(o.date) = 2017
AND NOT EXISTS
(SELECT 1
 FROM order o2
 WHERE o2.item IN ('A', 'B')
 AND YEAR(o2.date) = 2016
 AND o2.customer_id = o.customer_id)

这取决于您的表结构。但基本上您希望在主查询中找到2017年购买了商品A或B的客户。然后NOT EXISTS条款检查同一客户在前一年没有购买A或B.