需要选择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”