22. 查询相同时刻多地登陆的用户

题目需求

从登录明细表(user_login_detail)中查询在相同时刻,多地登陆(ip_address不同)的用户。

期望结果如下:

user_id

(用户id)
101
102
104

需要用到的表:

用户登录明细表:user_login_detail

user_id(用户id)ip_address(ip地址)login_ts(登录时间)logout_ts(登出时间)
101180.149.130.1612021-09-21 08:00:002021-09-27 08:30:00
102120.245.11.22021-09-22 09:00:002021-09-27 09:30:00
10327.184.97.32021-09-23 10:00:002021-09-27 10:30:00
思路一

分析题目:多地登录,找出(本次登录时间 < 上一次登出时间) and (本地ip地址 != 上次ip地址) 的用户。

在这里插入图片描述

实现一
-- 3) 找出(本次登录时间 < 上一次登出时间) and (本地ip地址 != 上次ip地址) 的用户
select distinct user_id
from (
         select user_id,
                ip_address,
                login_ts,
                logout_ts,
                -- 1) 计算上次登出时间(如果为null,则使用本地登录时间)
                lag(logout_ts, 1, login_ts) over (partition by user_id order by login_ts)           last_logout_ts,
                -- 2) 计算上次登录的ip地址(如果为null,则默认为 '000.000.000.000')
                lag(ip_address, 1, '000.000.000.000') over (partition by user_id order by login_ts) last_ip_address
         from user_login_detail
     ) t1
where login_ts < last_logout_ts
  and ip_address != last_ip_address;
题目来源

http://practice.atguigu.cn/#/question/22/desc?qType=SQL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dataer__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值