首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:在给定的日期范围内获取用户而不是loggedIn

SQL:在给定的日期范围内获取用户而不是loggedIn
EN

Stack Overflow用户
提问于 2017-10-02 11:29:18
回答 2查看 199关注 0票数 3

我有一个在MySQL中有两个表的场景。

表1:用户

表2: login_history

我试图想出一个查询,让那些在特定时间内没有登录的用户,比如2017-09-25和2017-10-2之间的用户。

我试着使用子查询,但是这个查询非常慢。在这个例子中,我给出了虚拟数据,但实际上有两个表--特别是login_history --有大量的数据,因此子查询需要时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-02 11:35:10

会是这样的:

代码语言:javascript
复制
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)上创建一个索引。

假设您只希望在某个时候登录的用户,您可以尝试聚合:

代码语言:javascript
复制
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应该更快。

票数 1
EN

Stack Overflow用户

发布于 2017-10-02 11:38:12

你就不能用一个基本的查询吗?

代码语言:javascript
复制
 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'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46524616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档