选择在X个月和Y或Z月购买的客户

时间:2016-11-03 15:00:51

标签: sql database oracle select

我有一张桌子可以存储客户购买的东西,我试图找到所有在2016年8月购买商品的客户(X)和2016年10月(Y)或2016年11月(Z)--- X AND (Y OR Z)

我需要输出来显示客户名称和购买日期。

客户由ALL_CUSTOMER_ID标识,日期存储在表ARRIVAL_DATE的{​​{1}}字段(Ex: 05-AUG-16)中。

客户名称存储在表格PMS_FOLIO中的NAME字段中。

2 个答案:

答案 0 :(得分:1)

使用TO_CHAR()表示月份,使用HAVING子句进行过滤:

SELECT t.cust_id
FROM purchases t
GROUP BY t.cust_id
HAVING COUNT(CASE WHEN TO_CHAR(DateField,'yyyymm') = '201608' THEN 1 END) > 0
   AND COUNT(CASE WHEN TO_CHAR(DateField,'yyyymm') IN ('201610','201611') THEN 1 END) > 0 

这也将返回10月和11月购买的客户。如果您只想购买其中一个,那么:

HAVING COUNT(CASE WHEN TO_CHAR(DateField,'yyyymm') = '201608' THEN 1 END) > 0
   AND MAX(CASE WHEN TO_CHAR(DateField,'yyyymm') = '201610' THEN 1 ELSE 0 END) + 
       MAX(CASE WHEN TO_CHAR(DateField,'yyyymm') = '201611' THEN 1 ELSE 0 END) = 1

答案 1 :(得分:0)

使用group byhaving。您的问题既不提供样本数据也不提供数据库标记,但这里的想法是:

select customerid
from t
group by customerid
having sum(case when month(date) = 8 then 1 else 0 end) > 0 and
       sum(case when month(date) in (10, 11) then 1 else 0 end) > 0;

您可能希望在比较中包含年份。