首页 > 数据库 >SQL,力扣题目1747,应该被禁止的 Leetflex 账户

SQL,力扣题目1747,应该被禁止的 Leetflex 账户

时间:2024-10-30 12:17:27浏览次数:8  
标签:02 00 account Leetflex 力扣 address login 1747 id

一、力扣链接

LeetCode_1747

二、题目描述

表: LogInfo

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

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

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

三、目标拆解

四、建表语句

Create table If Not Exists LogInfo (account_id int, ip_address int, login datetime, logout datetime)
Truncate table LogInfo
insert into LogInfo (account_id, ip_address, login, logout) values ('1', '1', '2021-02-01 09:00:00', '2021-02-01 09:30:00')
insert into LogInfo (account_id, ip_address, login, logout) values ('1', '2', '2021-02-01 08:00:00', '2021-02-01 11:30:00')
insert into LogInfo (account_id, ip_address, login, logout) values ('2', '6', '2021-02-01 20:30:00', '2021-02-01 22:00:00')
insert into LogInfo (account_id, ip_address, login, logout) values ('2', '7', '2021-02-02 20:30:00', '2021-02-02 22:00:00')
insert into LogInfo (account_id, ip_address, login, logout) values ('3', '9', '2021-02-01 16:00:00', '2021-02-01 16:59:59')
insert into LogInfo (account_id, ip_address, login, logout) values ('3', '13', '2021-02-01 17:00:00', '2021-02-01 17:59:59')
insert into LogInfo (account_id, ip_address, login, logout) values ('4', '10', '2021-02-01 16:00:00', '2021-02-01 17:00:00')
insert into LogInfo (account_id, ip_address, login, logout) values ('4', '11', '2021-02-01 17:00:00', '2021-02-01 17:59:59')

五、过程分析

1、添加辅助列is_login 和 is_logout,分别赋值为1 和 -1

2、登入和等出的记录纵向拼接,按账户、网址、日期(day)分组求时间的最值后(同一天在同一网址登录的可能会存在重复数据,根据题意这里不应该+1),时间与最大最小值相等的过滤出来,对辅助列进行累加

3、根据累加的值,如果大于1表示在两个地址登录

六、代码实现

with t1 as(
select account_id, ip_address, login time, 1 is_login
from LogInfo
union all
select account_id, ip_address, logout, -1 is_logout
from LogInfo
)
# select * from t1;
,t2 as(
    select distinct account_id, ip_address, is_login, time,
    max(time) over(partition by account_id, ip_address, left(time, 10)) max_time,
    min(time) over(partition by account_id, ip_address, left(time, 10)) min_time
    from t1
)
#    select * from t2;
,t3 as(
select account_id, ip_address,
       sum(is_login) over(partition by account_id order by time, is_login desc) rn
from t2 where time = max_time or time = min_time
)
select distinct account_id from t3 where rn > 1;

七、结果验证

八、小结

1、适时添加辅助列有助于解题

2、union all 纵向拼接,不去重

3、窗口函数使用聚合函数时不应该使用order by,会变成移动窗口,而不是对组内全体数据聚合,或者根据情况进行选择

4、同一解题方法需要学会举一反三

标签:02,00,account,Leetflex,力扣,address,login,1747,id
From: https://blog.csdn.net/m0_59659684/article/details/143360612

相关文章

  • SQL,力扣题目1699,两人之间的通话次数
    一、力扣链接LeetCode_1699二、题目描述表: Calls+-------------+---------+|ColumnName|Type|+-------------+---------+|from_id|int||to_id|int||duration|int|+-------------+---------+该表没有主键(具有唯一值......
  • 力扣-Mysql-1369-获取最近第二次的活动(困难)
    一、题目来源 1369.获取最近第二次的活动-力扣(LeetCode)二、数据表结构表: UserActivity+---------------+---------+|ColumnName|Type|+---------------+---------+|username|varchar||activity|varchar||startDate|Date......
  • 【力扣】GO解决子序列相关问题
    文章目录一、引言二、动态规划方法论深度提炼子序列问题的通用解法模式三、通用方法论应用示例:最长递增子序列(LeetCode题目300)Go语言代码实现四、最长连续递增序列(LeetCode题目674)Go语言代码实现五、最长重复子数组(LeetCode题目718)Go语言代码实现六、最长公共子序......
  • 力扣前1500道非会员题刷题笔记
    Problem:1.两数之和思路首先定义一个unordered_map<int,int>heap,用来记录数组nums中对应的数的下标然后在一个for循环里遍历nums数组用r记录target与当前数组的值的差值,再从当前数的前面找有没有这个差值,也就是heap.count(r),如果有则返回{heap[r],i},如果没有就把当......
  • java算法:力扣动态规划公式和例子,套这个就够了!
    持续更新…(跟着代码随想录总结的)使用场景:只要数值无限依赖于前面的数值就可以套用这个公式五步法dp数组及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组经典举例:斐波那契数斐波那契数是:一个数组得的某个数字等于前两个数字之和dp[i]dp[i][j]......
  • 力扣每日一题3181.执行操作可获得的最大总奖励2
      题目描述:给你一个整数数组 rewardValues,长度为 n,代表奖励的值。最初,你的总奖励 x 为0,所有下标都是 未标记 的。你可以执行以下操作 任意次 :从区间 [0,n-1] 中选择一个 未标记 的下标 i。如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardVa......
  • 力扣练习1355.活动参与者
    1355.活动参与者一、题目链接二、题目描述三、建表语句四、题目解答1、思路1讲解2、代码1实现3、思路2讲解4、代码2实现五、知识总结一、题目链接1355.活动参与者二、题目描述表:Friends±--------------±--------+|ColumnName|Type|±--------------±......
  • 力扣练习1264.页面推荐
    1264.页面推荐一、题目链接二、题目描述三、建表语句四、题目解答1、思路讲解2、代码实现五、知识总结一、题目链接1264.页面推荐(需要会员)二、题目描述朋友关系列表:Friendship±--------------±--------+|ColumnName|Type|±--------------±--------+......
  • 力扣 简单 111.二叉树的最小深度
    文章目录题目介绍题解题目介绍题解最小深度:从根节点到最近叶子结点的最短路径上节点数量。分三种情况讨论即可:当前节点为空,则返回当前节点minDepth=0;当前节点左右子树都存在,则返回当前节点minDepth=左右子树最小深度的最小值+1;当前节点的左右子树其中一个不存......
  • 力扣 简单 70.爬楼梯
    文章目录题目介绍题解题目介绍题解思路分析:确定dp数组以及下标的含义:dp[i]:爬到第i层楼梯,有dp[i]种方法确定递推公式:从dp[i]的定义可以看出,dp[i]可以有两个方向推出来。首先是dp[i-1],上i-1层楼梯,有dp[i-1]种方法,那么再一步跳一个台阶不就是dp[i]了么。还有......