当前位置: 首页 > news >正文

力扣1747-应该被禁止的Leetflex帐户 - 指南

表: LogInfo

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

编写解决方案,查找那些应该被禁止的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、使用同一张日志表进行自连接
题目需要判断同一个账号是否在不同 IP 地址下存在登录时间重叠的情况,因此对登录日志表进行自连接,将其分别作为两份数据进行比较。

2、限定为同一账号的登录记录
在自连接条件中,首先要求两条日志记录属于同一个账号,这样才能判断该账号在不同时间段、不同 IP 下的登录行为是否存在冲突。

3、筛选不同 IP 地址的登录行为
通过比较两条日志记录的 IP 地址,排除同一 IP 的情况,只保留在不同 IP 地址下发生的登录记录,以满足题目对异常登录的判定要求。

4、判断登录时间是否存在重叠
通过比较两次登录的登录时间和登出时间,判断两个时间区间是否存在交集。如果一条记录的登出时间晚于或等于另一条记录的登录时间,且另一条记录的登录时间早于或等于前一条记录的登出时间,则说明登录时间发生了重叠。

5、去重并输出账号结果
最后只返回满足上述条件的账号编号,并通过去重处理,确保每个账号在结果中只出现一次。

代码:

select distinct a.account_id as account_id
from LogInfo a, LogInfo b
where a.account_id = b.account_idand a.ip_address != b.ip_addressand a.logout <= b.logoutand b.login <= a.logout

http://www.jsqmd.com/news/359466/

相关文章:

  • APUE笔记:Process Environment(七) - Invinc
  • 401 Unauthorized from POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/gener
  • jsp蛋糕甜品店管理系统4fx6j--(程序+源码+数据库+调试部署+开发环境)
  • jsp代理会计企业信息管理系统b4072(程序+源码+数据库+调试部署+开发环境)
  • 在线制作物业管理制度流程图轻松上手无需专业绘图技巧
  • 【题解】Atcoder Beginner Contest 444(ABC444) A~E
  • SampSharp ECS 创建 PlayerTextDraw
  • jsp德育管理系统63rh0--程序+源码+数据库+调试部署+开发环境
  • Excel表格自适应大小设置方法 - 指南
  • 企业元宇宙布局中的AI数据存储:AI应用架构师的5个选择策略
  • 详细介绍:Chromium 140 编译指南 macOS 篇:安装与配置 Xcode(二)
  • jsp党员信息管理系统76673--(程序+源码+数据库+调试部署+开发环境)
  • 给投放 google ads 广告的新手写的一些话
  • 机房管理难题终结者:U位系统解决资源闲置、故障排查慢等核心问题
  • 洛谷 P1368:工艺 ← 双指针 + 解环成链
  • Redis缓冲区溢出及解决方案
  • C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
  • ros2-赵虚左老师讲义获取
  • 以太网终端主机常用的Command
  • 博泰车联网智能座舱 Android 开发工程师的核心能力与实战挑战
  • 简单制作公司固定资产管理图 新手画图也能快速上手
  • PADS 多层板设计时怎么设置满足3W间距 或 不在某参考层布线
  • 企业级应用:Copilot在团队协作开发中的落地实践
  • 为什么企业都在转向信创RFID?对比传统条码的惊人优势揭秘
  • Diff2Flow中扩散和流匹配的对齐探索
  • 从零学网络安全 - 数据库安全与 SQL 注入(一)数据库基础
  • 轻松绘制合同审批流程图画图操作便捷不费力超省事
  • PADS 扇孔设置 扇孔到BGA焊盘内部解决办法
  • AI智能体实际应用场景盘点:从自动化办公到复杂决策的智能体部署流程图
  • 省心绘制财务核算流程图零门槛操作画图超便捷高效