需要选择2000年第一次购买的客户ID-sql

需要选择2000年第一次购买的客户ID-sql,sql,ms-access,Sql,Ms Access,我正在写一个查询,为营销活动的目标受众创建一个列表。列表应遵循以下标准: -信用卡号以100或110开头 -客户住在A城市 -活动表中不存在客户的信用卡。 -客户有电话号码(电话号码PHONE1和PHONE2有两列) -客户有一封电子邮件 -首次购买日期为2000年 SELECT cust_id min(purchase_date) = 2000 FROM customers WHERE cardno not in (SELECT cardno FROM campaign WHERE cust

我正在写一个查询,为营销活动的目标受众创建一个列表。列表应遵循以下标准:
-信用卡号以100或110开头
-客户住在A城市 -活动表中不存在客户的信用卡。 -客户有电话号码(电话号码PHONE1和PHONE2有两列) -客户有一封电子邮件 -首次购买日期为2000年

SELECT cust_id
min(purchase_date) = 2000 
FROM customers
WHERE cardno not in (SELECT cardno FROM campaign WHERE cust_cardno = 
campaign.cardno) 
AND City = "A"
AND Email IS NOT NULL
AND cardno LIKE '[100-110]%'
AND PHONE1, PHONE2 IS NOT NULL 
OR PHONE1 IS NOT NULL
OR PHONE2 IS NOT NULL;  
有些查询不正确,它们是: 1) 信用卡号以100 0r 110->和类似于“[100-110]”的卡号开头 2) 客户有电话号码(电话号码PHONE1和PHONE2有两列)-> 和PHONE1,PHONE2不为空 或PHONE1不为空 或PHONE2不为空 3) 第一次采购日期在2000年->最小(采购日期)=2000年 这些查询中有哪些错误

检查这个

SELECT c.cust_id
FROM customers c
WHERE cardno not in (SELECT cardno FROM campaign ) 
AND City = "A"
AND Email IS NOT NULL
AND (cardno LIKE '[100]*' OR  cardno LIKE '[110]*')
AND  (PHONE1 IS NOT NULL
OR PHONE2 IS NOT NULL)
AND 
year(purchase_date) = 2000 ;  

您有多个错误。例如,
min()。聚合后过滤,但没有
具有
。通过逗号连接的过滤条件。缺少逗号等

所以,我想你想要:

SELECT cust_id
FROM customers as c
WHERE NOT EXISTS (SELECT 1 FROM campaign ca WHERE ca.cardno = c.cust_cardno) AND
      City = "A"
      Email IS NOT NULL AND
      LEFT(cardno, 3) IN ('100', '110') AND
      (PHONE1 IS NOT NULL OR
       PHONE2 IS NOT NULL 
      )
GROUP BY cust_id
HAVING min(purchase_date) = 2000 ;
请注意,我将
不在
中替换为
不存在
<如果返回的任何行为
NULL
,则代码>不在
中不会按预期工作


我还修改了“开始”逻辑。

预期输出是什么?并提供示例数据。
*
在MS Access中用作通配符,而不是
%
。预期的输出是符合标准的客户列表。您当前的outputmin(purchase_date)=2000有什么问题,就像我单独尝试时一样。即使在我使用*时,与cardno类似的“[100-110]”也是如此。当我们第一次查询selcet sut_id时,Group By会做什么?他们不是做同样的事吗?@user233531。这个答案中没有
sut\u id
,所以我不知道你的评论指的是什么。很明显,我的意思是“cust\u id”而不是“sut\u id”