我有2张桌子,1张用户桌子和一张桌子
外发电子邮件排队。我想选择用户
在一段时间内不在线的人
并发送电子邮件给他们。我也想要,如果他们是
在过去7天内收到了这样的电子邮件
或者在接下来的7天内收到预定的电子邮件,
他们没有被选中。
我有2个查询,我认为如果是这样的话会很好 他们正在使用子查询。
作为一个我不是专家的领域,我会 喜欢邀请你参加,
我会更开心:)
感谢您阅读
SELECT
`user_id`
FROM
`user`
WHERE
DATEDIFF( CURRENT_DATE(), date_seen ) >= 7
应排除第二个查询的结果 来自上面的查询。
SELECT
`mail_queue_id`,
`mail_id`,
`user_id`,
`status`,
`date_scheduled`,
`date_processed`
FROM
`mail_queue`
WHERE
(
DATEDIFF( CURRENT_DATE(), date_scheduled ) >= 7
OR
DATEDIFF( date_scheduled, CURRENT_DATE() ) <= 7
)
AND
(
`mail_id` = 'inactive_week'
AND
(
`status` = 'AWAITING'
OR
`status` = 'DELIVERED'
)
)
SELECT
`user_id`
FROM
`user` as T1
WHERE
DATEDIFF( CURRENT_DATE(), date_seen ) >= 7
AND NOT EXISTS
(
SELECT
`user_id`
FROM
`mail_queue` as T2
WHERE
T2.`user_id` = T1.`user_id`
AND
(
DATEDIFF( CURRENT_DATE(), date_scheduled ) >= 7
OR
DATEDIFF( date_scheduled, CURRENT_DATE() ) <= 7
AND
(
`mail_id` = 'inactive_week'
AND
(
`status` = 'AWAITING'
OR
`status` = 'DELIVERED'
)
)
)
)
答案 0 :(得分:1)
你可以选择符合第一个标准的用户(过去七天没有登录),然后使用“NOT EXISTS”将该标准“和”到另一个子句,对同一个表别名:
select * from T where {first criterion}
and not exists
(
select * from T as T2 where T2.userid = T.userid
and ABS( DATEDIFF(datescheduled, CURRENT_DATE()) ) <=7
)
我不熟悉mysql DATEDIFF的细微差别,即是否重要哪个日期值出现在哪个位置,但绝对值会使得如果用户在过去7天内收到通知或者计划在接下来的七天内收到通知,他们会满足条件,从而使NOT EXISTS条件失败,不包括最后一组用户。