返回介绍

solution / 1700-1799 / 1747.Leetflex Banned Accounts / README

发布于 2024-06-17 01:03:15 字数 2648 浏览 0 评论 0 收藏 0

1747. 应该被禁止的 Leetflex 账户

English Version

题目描述

表: 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)上激活了。它应该被禁止.

解法

方法一:自连接

我们可以通过自连接的方式,找出每个账户在同一天内,从不同的网络地址登录的情况。连接的条件是:

  • 账户编号相同
  • 网络地址不同
  • 一次登录的时间在另一次“登录-退出”的时间范围内
# Write your MySQL query statement below
SELECT DISTINCT
  a.account_id
FROM
  LogInfo AS a
  JOIN LogInfo AS b
    ON a.account_id = b.account_id
    AND a.ip_address != b.ip_address
    AND a.login BETWEEN b.login AND b.logout;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文