[英]SQL: Get users not loggedIn in given date range
我有一个在MySQL中有两个表的场景。
表1:用户
表2:login_history
我正在尝试提出一个查询,以便在给定的时间段内,例如在2017-09-25和2017-10-2之间获取未登录的用户。
我试图使用子查询,但该查询非常慢。 在这个例子中,我给出了伪数据,但实际上两个表特别是login_history有大量的数据,因此子查询需要时间。
它会是这样的:
select u.*
from users u
where not exists (select 1
from logins l
where l.user_id = u.id and
l.login_at >= '2017-09-25' and
l.login_at <= '2017-10-02'
);
如果这很慢,那么尝试在logins(user_id, login_at)
创建索引logins(user_id, login_at)
。
假设您只想要在某个时间点登录的用户,您可以尝试聚合:
select l.user_id
from logins l
group by l.user_id
having sum(l.login_at >= '2017-09-25' and l.login_at <= '2017-10-02') = 0;
但是, not exists
应该更快。
你能不能使用基本的查询?
SELECT * FROM USERS U
JOIN login_history L
ON U.id = L.user_id
WHERE login_at NOT BETWEEN '2017-09-25' AND '2017-10-2'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.