• 1747. 应该被禁止的 Leetflex 账户


    SQL架构

    表: LogInfo

    +-------------+----------+
    | Column Name | Type     |
    +-------------+----------+
    | account_id  | int      |
    | ip_address  | int      |
    | login       | datetime |
    | logout      | datetime |
    +-------------+----------+
    该表是没有主键的,它可能包含重复项。
    该表包含有关Leetflex帐户的登录和注销日期的信息。 它还包含了该账户用于登录和注销的网络地址的信息。
    题目确保每一个注销时间都在登录时间之后。
    

    编写一个SQL查询语句,查找那些应该被禁止的Leetflex帐户编号 account_id 。 如果某个帐户在某一时刻从两个不同的网络地址登录了,则这个帐户应该被禁止。

    可以以 任何顺序 返回结果。

    查询结果格式如下例所示。

    示例 1:

    输入:
    LogInfo table:
    +------------+------------+---------------------+---------------------+
    | account_id | ip_address | login               | logout              |
    +------------+------------+---------------------+---------------------+
    | 1          | 1          | 2021-02-01 09:00:00 | 2021-02-01 09:30:00 |
    | 1          | 2          | 2021-02-01 08:00:00 | 2021-02-01 11:30:00 |
    | 2          | 6          | 2021-02-01 20:30:00 | 2021-02-01 22:00:00 |
    | 2          | 7          | 2021-02-02 20:30:00 | 2021-02-02 22:00:00 |
    | 3          | 9          | 2021-02-01 16:00:00 | 2021-02-01 16:59:59 |
    | 3          | 13         | 2021-02-01 17:00:00 | 2021-02-01 17:59:59 |
    | 4          | 10         | 2021-02-01 16:00:00 | 2021-02-01 17:00:00 |
    | 4          | 11         | 2021-02-01 17:00:00 | 2021-02-01 17:59:59 |
    +------------+------------+---------------------+---------------------+
    输出:
    +------------+
    | account_id |
    +------------+
    | 1          |
    | 4          |
    +------------+
    解释:
    Account ID 1 --> 该账户从 "2021-02-01 09:00:00" 到 "2021-02-01 09:30:00" 在两个不同的网络地址(1 and 2)上激活了。它应该被禁止.
    Account ID 2 --> 该账户在两个不同的网络地址 (6, 7) 激活了,但在不同的时间上.
    Account ID 3 --> 该账户在两个不同的网络地址 (9, 13) 激活了,虽然是同一天,但时间上没有交集.
    Account ID 4 --> 该账户从 "2021-02-01 17:00:00" 到 "2021-02-01 17:00:00" 在两个不同的网络地址 (10 and 11)上激活了。它应该被禁止.
    1. select
    2. distinct account_id
    3. from
    4. (
    5. select
    6. l1.account_id,if(l2.login>=l1.login and l2.login <=l1.logout or l1.login>=l2.login and l1.login <=l2.logout,1,0) no #不同地址的登录时间区间有交集 则 置1
    7. from
    8. LogInfo l1 , LogInfo l2
    9. where l1.account_id = l2.account_id and l1.ip_address < l2.ip_address
    10. )s1
    11. where no = 1 # 选出 no= 1 的 值 就是题的需求

    where 里直接条件判断 :

    1. SELECT DISTINCT a.account_id AS account_id -- 封他!
    2. FROM LogInfo a, LogInfo b
    3. WHERE a.account_id = b.account_id -- 某个用户
    4. AND a.ip_address != b.ip_address -- 异地登陆
    5. AND a.logout <= b.logout -- 其中一个还没下线
    6. AND b.login <= a.logout -- 另一个就登上来了

  • 相关阅读:
    2022 ICPC Gran Premio de Mexico 1ra Fecha(一)
    JMeter类比loadrunner断言、参数化、集合点、关联、事务——学习笔记
    这10张图拿去,别再说学不会RecyclerView的缓存复用机制了!
    手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式
    java泛型类型解释
    大数据入门篇
    TypeScript的函数和类
    springboot+vue+nodejs企业公司财务员工工资管理系统java
    Video generation models as world simulators-视频生成模型作为世界模拟器
    java面试题整理《微服务篇》四
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125565938