嗨,我有一张看起来像这样的桌子
我需要选择仅在2015年购买的客户,这意味着我不需要2015年和2016年购买的客户。但可悲的是我无法弄清楚 任何帮助都会被禁止
是否可以像
一样写 select customerid
from x
where year(date)="2015" and year(date)!=2016
谢谢:)
答案 0 :(得分:0)
您可以通过以下方法做到这一点:首先找到2016年有购买的客户,然后将2015年有购买的所有客户带走,除了那些也在2016年组中列出的客户:
SELECT DISTINCT t1.customerid
FROM x AS t1
LEFT JOIN (
SELECT DISTINCT customerid -- select the 2016 consumerid group
FROM x
WHERE date BETWEEN '2016-01-01' AND '2016-12-31'
) AS t2
ON t1.customerid = t2.customerid
WHERE date BETWEEN '2015-01-01' AND '2015-12-31'
AND t2.customerid IS NULL -- only take rows without consumerid match in 2016
我还添加了DISTINCT
以避免重复(如果某个客户在2015年购买了几次)
如@Strawberry所述,year(date)
无法使用索引,因此我将其更改为BETWEEN