首页 > 其他分享 >180. Consecutive Numbers 连续登录n次的用户

180. Consecutive Numbers 连续登录n次的用户

时间:2024-01-23 22:44:09浏览次数:31  
标签:over number order 180 Num Numbers Consecutive id row

虽然题目很简短,但是很难做啊!属于比较经典的题目,记录一下思路。

参考链接:https://leetcode.cn/problems/consecutive-numbers/solutions/21537/sql-server-jie-fa-by-neilsons

row_number() over([partition by value_expression,...n] order by columnName)

题目解析:

1. 要获取至少连续出现三次的数字,不能强力破解,三个表join,如果出现一百次呢?

2. 寻找连续相同num数字,但是id在实际工作过程中可能是不连续的,比如某一次操作删除了某些数据。这样我们可能就需要对结果集合编号,使其变成连续的。

原始数据:(这里我们也考虑了可能)

解题过程:

1. 对于原始数据编号,从1开始使用row_number() over(expresion)函数,使用id来排序。

SELECT id, num,
row_number() over(order by id) as SerialNum
FROM ContinueNumber

运行结果为:

2. 使用原始数据另一维度排序,这些num值一样的分组排序,然后对其编号同样使用row_number() over(expresion)。

SELECT id, num,
row_number() over(partition by num order by id) as SerialGroup
FROM ContinueNumber

3. 经过上述操作,两个列(SerialNum,SerialGroup)对应相减,只要连续,相减得到的值是一样的,不连续的话,相减得到的值不同。

SELECT Id,Num,
      row_number() over(order by id) -
      row_number() over(partition by Num order by Id) as SerialNumberSubGroup
      FROM ContinueNumber

4. 通过步骤3的操作,通过num和SerialNumberSubGroup列进行分组,最后拿到Num,就是得到的数据,去重是因为有可能同一个数字在多处出现三次以上。

SELECT DISTINCT Num FROM (
SELECT Num,COUNT(1) as SerialCount FROM 
(SELECT Id,Num,
row_number() over(order by id) -
ROW_NUMBER() over(partition by Num order by Id) as SerialNumberSubGroup
FROM ContinueNumber) as Sub
GROUP BY Num,SerialNumberSubGroup HAVING COUNT(1) >= 3) as Result

 

标签:over,number,order,180,Num,Numbers,Consecutive,id,row
From: https://www.cnblogs.com/lbwBH/p/17983600

相关文章

  • [转帖]彻底搞明白 GB2312、GBK 和 GB18030
    https://zhuanlan.zhihu.com/p/453675608 日常工作的过程中,关于字符编码的问题经常让人头疼不已,这篇文章就来捋一捋关于GB2312、GBK、GB18030相关的知识以及它们和Unicode的关系简介GB23121980年,中国发布了第一个汉字编码标准,也即GB2312,全称《信息交换用汉......
  • Modbus转PROFINET网关TS-180快速实现软启动器和马达保护器与西门子PLC的通信
    在钢铁厂的生产过程中,电机作为驱动各种生产机械和辅助设备的关键设备,其正常运行对于生产效率和质量至关重要。为了确保电机的正常运行和使用寿命,通常会使用软启动器和马达保护器等设备,因此监控软启和马达保护器的工作参数成为重点。福建某钢铁厂,中控室使用S7-1515PLC,实时监控现场......
  • AT_abc180_d
    贪心思想,STR值增长得越慢,可能得到的EXP值就越多。根据此,我们在\(x\)较小时,可以乘\(a\)也可以加\(b\),选择运算后较小的一种情况。在某一时刻,当\(x\timesa>x+b\)时,可知一直到最后都应选择加\(b\)(前者是几何级增长,后者是算术级增长)。然后计算能加的次数即可。具体......
  • 无涯教程-MATLAB - 数字(Numbers)
    MATLAB支持各种数字类,包括有符号和无符号整数以及单精度和双精度浮点数,默认情况下,MATLAB将所有数值存储为双精度浮点数。您可以选择将任何数字或数字数组存储为整数或单精度数字,所有数值类型都支持基本数组运算和数学运算。数据类型MATLAB提供以下函数以转换为各种数值数据类......
  • 16 Battling with Numbers
    组合数(2次方级)的组合#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmod=998244353;voidsolve(){ intn; cin>>n; vector<int>a(n+1); for(inti=1;i<=n;i++)cin>>a[i]; map<int,int>mp; for(inti=1;i&l......
  • 549. Binary Tree Longest Consecutive sequence
    给定一棵二叉树,求其最长连续数字路径(指的是形如x,x+1,x+2,...,x+kx,x+1,x+2,...,x+kx,x+1,x+2,...,x+k的路径)的长度。路径可以由任一点出发,任一点结束。publicclassShowMeBug{publicstaticclassTreeNode{publicintval;public......
  • 文心一言 VS 讯飞星火 VS chatgpt (180)-- 算法导论13.4 3题
    三、用go语言,在练习13.3-2中,将关键字41、38、31、12、19、8连续插入一棵初始的空树中,从而得到一棵红黑树。请给出从该树中连续删除关键字8、12、19、31、38、41后的红黑树。文心一言,代码不能运行:为了解决这个问题,我们首先需要构建一棵红黑树,然后依次删除给定的关键字。以下......
  • 无涯教程-LISP - 数字(Numbers)
    CommonLisp number数据类型包括LISP支持的各种数字。LISP支持的数字类型是-IntegerRatiosFloatComplex下图显示了LISP中可用的数字层次结构和各种数字数据类型-数字类型下表描述了LISP中可用的各种数字类型数据-Sr.No.Datatype&描述1fixnum此数据类型表示......
  • CVE-2020-11800
    ZabbixServertrapper命令注入漏洞(CVE-2020-11800)Zabbix是由AlexeiVladishev开发的一种网络监控、管理系统,基于Server-Clinet架构。在CVE-2017-2824中,其Server端trappercommand功能存在一处代码执行漏洞,而修复补丁并补完善,导致可以利用IPv6进行绕过,注入任意命令。环境搭建执......
  • 小尺寸、可节省电路板空间的 MCS1801GS-25、MCS1801GS-12、MCS1800GS-12、MCS1800GS-2
    典型应用:•电机控制•汽车系统•负载检测和管理•开关模式电源•过流故障保护器件说明:MCS180x线性霍尔效应电流传感器具有小尺寸,可节省电路板空间,非常适合空间受限的应用。该系列采用SOIC-8封装,提供卷带选项。MCS180x模块用于交流和直流电流检测。霍尔阵列是差分的,它抵消了杂散......