繁体   English   中英

SQL:在给定的日期范围内获取未登录的用户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM