【发布时间】:2020-03-21 17:20:12
【问题描述】:
我有 2 个表(以 user_id 为基础加入);
1 = Task ( id, user_id,task_title,created_datetime)
2 = users (id,name)
我想获取过去 5 天内未记录时间的所有用户的电子邮件。 提前致谢。
【问题讨论】:
-
轻松为您提供帮助:minimal reproducible example.
我有 2 个表(以 user_id 为基础加入);
1 = Task ( id, user_id,task_title,created_datetime)
2 = users (id,name)
我想获取过去 5 天内未记录时间的所有用户的电子邮件。 提前致谢。
【问题讨论】:
您可以如下使用子查询-
SELECT * FROM users
WHERE ID IN (
SELECT A.id
FROM users A
INNER JOIN Task B ON A.id = B.user_id
GROUP BY A.id
HAVING MAX(created_datetime) < DATE_ADD(NOW(), INTERVAL -5 DAY)
)
【讨论】:
如果您的表定义是这样的: 1 = 任务(id、user_id、task_title、created_datetime) 2 = 用户(ID、姓名、电子邮件) 并且您正在使用 created_datetime 来存储登录时间,那么以下查询应该可以工作:
SELECT email FROM users
WHERE id not IN (
SELECT distinct A.id
FROM users A
INNER JOIN Task B ON A.id = B.user_id
where A.created_datetime > DATE_ADD(NOW(), INTERVAL -5 DAY)
)
【讨论】:
您可以尝试以下操作:
SELECT a.*
FROM users a
INNER JOIN
(SELECT *
FROM (SELECT *
FROM task
ORDER BY created_datetime DESC) AS a
GROUP BY a.user_id ) AS b
ON a.id = b.user_id
WHERE b.created_datetime < CURRENT_DATE - interval 5 day;
【讨论】: