SQL查询连续号码段的巧妙解法
在ITPUB上有一则非常巧妙的SQL技巧,学习一下,记录在这里。
最初的问题是这样的:
我有一个表结构,
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125
(第二个字段内可能是连续的数据,可能存在断点。)
怎样能查询出来这样的结果,查询出连续的记录来。
就像下面的这样?
2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125
ITPUB上的朋友给出了一个非常巧妙的答案:
SELECT b.fphm, MIN (b.kshm) Start_HM, MAX (b.kshm) End_HM
FROM (SELECT a.*, TO_NUMBER (a.kshm - ROWNUM) cc
FROM (SELECT *
FROM t
ORDER BY fphm, kshm) a
) b
GROUP BY b.fphm, b.cc
相关推荐
-
连续序号的 sql语句
复制代码 代码如下: # id唯一,num连续序号 # select a.id,num=(select count(1) from tb b where b.id<=a.id ) from tb a
-
oracle—SQL技巧之(一)连续记录查询sql案例测试
需求说明: 需要查询出某个客户某一年那些天是有连续办理过业务 实现SQL如下: 创建表: 复制代码 代码如下: create table test_num (tyear number, tdate date); 测试数据: insert into test_num select 2014,trunc(sysdate)-1 from dual union all select 2014,trunc(sysdate)-002 from dual union all select 2014,trunc
-
SQL查询连续号码段的巧妙解法
在ITPUB上有一则非常巧妙的SQL技巧,学习一下,记录在这里. 最初的问题是这样的: 我有一个表结构, fphm,kshm 2014,00000001 2014,00000002 2014,00000003 2014,00000004 2014,00000005 2014,00000007 2014,00000008 2014,00000009 2013,00000120 2013,00000121 2013,00000122 2013,00000124 2013,00000125 (第二个
-
SQL查询连续登陆7天以上的用户的方法实现
查询7天连续登陆用户这个问题很经典,解决方法也有很多,这里我讲一下笔者的方法,希望对大家有帮助. 具体思路: 1.因为每天用户登录次数可能不止一次,所以需要先将用户每天的登录日期去重. 2.再用row_number() over(partition by _ order by _)函数将用户id分组,按照登陆时间进行排序. 3.计算登录日期减去第二步骤得到的结果值,用户连续登陆情况下,每次相减的结果都相同. 4.按照id和日期分组并求和,筛选大于等于7的即为连续7天登陆的用户. 表信息如下图 第
-
SQL 查询连续登录的用户情况
以连续3天为例,使用工具:MySQL. 1.创建SQL表: create table if not exists orde(id varchar(10),date datetime,orders varchar(10)); insert into orde values('1' , '2019/1/1',10 ); insert into orde values('1' , '2019/1/2',109 ); insert into orde values('1' , '2019/1/3',15
-
Hive-SQL查询连续活跃登录用户思路详解
连续活跃登陆的用户指至少连续2天都活跃登录的用户 解决类似场景的问题 创建数据 CREATE TABLE test5active( dt string, user_id string, age int) ROW format delimited fields terminated BY ','; INSERT INTO TABLE test5active VALUES ('2019-02-11','user_1',23),('2019-02-11','user_2',19), ('2019-02
-
SQL查询语句求出用户的连续登陆天数
一.题目描述 求解用户登陆信息表中,每个用户连续登陆平台的天数,连续登陆基础为汇总日期必须登陆,表中每天只有一条用户登陆数据(计算中不涉及天内去重). 表描述:user_id:用户的id: sigin_date:用户的登陆日期. 二.解法分析 注:求解过程有多种方式,下述求解解法为笔者思路,其他解法可在评论区交流. 思路: 该问题的突破的在于登陆时间,计算得到连续登陆标识,以标识分组为过滤条件,得到连续登陆的天数,最后以user_id分组,以count()函数求和得到每个用户的连续登陆天数. 连
-
SQL查询至少连续n天登录的用户
以连续3天为例,使用工具:MySQL. 1.创建SQL表: create table if not exists orde(id varchar(10),date datetime,orders varchar(10)); insert into orde values('1' , '2019/1/1',10 ); insert into orde values('1' , '2019/1/2',109 ); insert into orde values('1' , '2019/1/3',15
-
SQL查询至少连续七天下单的用户
创建表格 create table orde(id varchar(10),date datetime,orders varchar(10)); insert into orde values('1' , '2019/1/1',10 ) insert into orde values('1' , '2019/1/2',109 ) insert into orde values('1' , '2019/1/3',150 ) insert into orde values('1' , '2019/1
-
oracle常用sql查询语句部分集合(图文)
Oracle查询语句 select * from scott.emp ; 1.--dense_rank()分析函数(查找每个部门工资最高前三名员工信息) select * from (select deptno,ename,sal,dense_rank() over(partition by deptno order by sal desc) a from scott.emp) where a<=3 order by deptno asc,sal desc ; 结果: --rank()分析函数(
-
SQL查询语句优化的实用方法总结
查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率.最近在对项目中的一些sql进行优化,总结整理了一些方法. 1.在表中建立索引,优先考虑where.group by使用到的字段. 2.尽量避免使用select *,返回无用的字段会降低查询效率.如下: SELECT * FROM t 优化方式:使用具体的字段代替*,只返回使用到的字段. 3.尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描.如下: SELEC
-
MySQL中一条SQL查询语句是如何执行的
目录 前言 1. 处理连接 1.1 客户端和服务端的通信方式 1.1.1 TCP/IP协议 1.1.2 UNIX域套接字 1.1.3 命名管道和共享内存 1.2 权限验证 1.3 查看MySQL连接 2. 解析与优化 2.1 查询缓存 2.2 解析器 & 预处理器(Parser & Preprocessor) 2.2.1 词法解析 2.2.2 语法分析 2.2.3 预处理器 2.3 查询优化器(Optimizer)与查询执行计划 2.3.1 什么是查询优化器? 2.3.2 优化器究竟做了什
随机推荐
- python通过scapy获取局域网所有主机mac地址示例
- javascript日期操作详解(脚本之家整理)
- smarty静态实验表明,网络上是错的~呵呵
- 小结下MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法第1/3页
- Android中利用SurfaceView制作抽奖转盘的全流程攻略
- Android实现网络图片浏览功能
- 解决MySQL中的Slave延迟问题的基本教程
- Android 大文件上传时处理上传进度问题小结
- php+jQuery实现的三级导航栏下拉菜单显示效果
- Oracle的RBO和CBO详细介绍和优化模式设置方法
- jquery分页插件AmSetPager(自写)
- 原生javascript实现分页效果
- JavaScript 学习笔记之变量及其作用域
- Java中5种方式实现String反转
- 解析Java的JNI编程中的对象引用与内存泄漏问题
- 打造酷炫的AndroidStudio插件
- Laravel Memcached缓存驱动的配置与应用方法分析
- Python之ReportLab绘制条形码和二维码的实例
- 利用Opencv中Houghline方法实现直线检测
- spring mvc DispatcherServlet之前端控制器架构详解
