gpt4 book ai didi

mysql - 选择子表没有数据的客户

转载 作者:行者123 更新时间:2023-11-29 10:26:37 25 4
gpt4 key购买 nike

我的客户数据表如下:

enter image description here

子数据表如下:

enter image description here

现在我正在尝试访问子数据表中不可用的数据

例如

我希望客户符合以下条件

1) 今天的日期应在客户到期日减 (-) 2 个月内,这意味着访问的客户将从今天起两个月后到期

2) 客户应该是成员(member)而不是管理员

3) 今天系统尚未向特定客户发送通知

4) 通知类型应为“6”

根据上面的测试数据

如果今天的日期是2018-01-09,那么结果应该是

第一位客户“吉人”系统已发送通知

第一位客户“Lee”系统已发送通知

所以我希望结果中包含客户 ID 3 和 4

我使用了以下查询,但它无法正常工作:

SELECT customer_id,customer_token,customer_name,expiry_date
,DATE_FORMAT(`expiry_date` - INTERVAL '2' MONTH, '%Y-%m-%d') AS
ExpireLim,notification_id FROM customer
LEFT JOIN notification ON customer.customer_id = notification.no_customer_id
WHERE customer_token != '' AND no_type = '6'
AND DATE_FORMAT(no_date,'%Y-%m-%d') = '2018-01-09'
AND customer_token != 'device_token' AND is_member = 1
AND CURRENT_DATE = `expiry_date` - INTERVAL '2' MONTH
AND is_admin = 0

最佳答案

不要加入。如果您想知道通知是否存在,请使用 EXISTSIN 子句。

SELECT 
customer_id,
customer_token,
customer_name,
expiry_date,
DATE_FORMAT(EXPIRY_DATE - INTERVAL 2 MONTH, '%Y-%m-%d') as expirelim
FROM customer c
WHERE customer_token != ''
AND expiry_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 2 MONTH
AND is_member = 1
AND is_admin = 0
AND NOT EXISTS
(
SELECT *
FROM notification n
WHERE n.customer_id = c.customer_id
AND n.no_type = 6
AND date(n.no_date) = date '2018-01-09'
);

我认为 notification.customer_id 不能为空。因此,您可以使用更简单的 NOT IN 代替 NOT EXISTS:

AND customer_id NOT IN
(
SELECT customer_id
FROM notification
WHERE no_type = 6
AND date(no_date) = date '2018-01-09'
);

您可能需要调整到期条款。我认为它的意思是从现在到现在+2个月到期。这包括时间。也许您更想要date(expiry_date)。顺便说一句,月份的长度并不是一个精确的数字。从2月1日到3月1日的时间比从3月1日到4月1日的时间短。也许您想将此规则改为60天或类似的时间。

关于mysql - 选择子表没有数据的客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com