我有一张桌子可以存储客户购买的东西,我试图找到所有在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
字段中。
答案 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 by
和having
。您的问题既不提供样本数据也不提供数据库标记,但这里的想法是:
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;
您可能希望在比较中包含年份。