• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >数据库其它 > SQL查询连续号码段的巧妙解法

SQL查询连续号码段的巧妙解法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sql验证身份证号码,sql错误号码2003,sql按时间段查询,sql查询时间段数据,sql时间段查询等相关知识,希望本文的分享对您有所帮助

昨天在itpub看到这个帖子, 问题觉得有意思,, 就仔细想了想. 也给出了一种解决办法..:-)

问题求助,请高手指点..

我有一个表结构,
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

方法一: 引用自hmxxyy.

ID SEQ
---------- ----------
1 1
1 4
1 5
1 8
2 1
2 2
2 9

select res1.id, res2.seq str, res1.seq end
from (
select rownum rn, c.*
from (
select *
from gap a
where not exists (
select null from gap b where b.id = a.id and a.seq = b.seq - 1
)
order by id, seq
) c
) res1, (
select rownum rn, d.*
from (
select *
from gap a
where not exists (
select null from gap b where b.id = a.id and a.seq = b.seq + 1
)
order by id, seq
) d
) res2
where res1.id = res2.id
and res1.rn = res2.rn
/

ID STR END
--------- ---------- ----------
1 1 1
1 4 5
1 8 8
2 1 2
2 9 9
</div>

方法二: 使用lag/lead分析函数进行处理.. 楼上的方法确实挺好用就是觉得表扫描/表连接比较多, 可能数据量大了. 速度会比较慢, 当然我的这种方法由于使用分析函数使用的比较频繁.所以排序量可能比上一种要多..

      FPHM KSHM                                                                
---------- ----------------                                                    
      2014 00000001                                                            
      2014 00000002                                                            
      2014 00000003                                                            
      2014 00000004                                                            
      2014 00000005                                                            
      2014 00000007                                                            
      2014 00000008                                                            
      2014 00000009                                                            
      2013 00000120                                                            
      2013 00000121                                                            
      2013 00000122                                                            

      FPHM KSHM                                                                
---------- ----------------                     &

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQL查询连续号码段的巧妙解法

相关文章

  • 2017-05-11sql语句中where和having的区别
  • 2017-05-11执行Insert Exec时的隐藏开销 分析
  • 2017-05-11SQLite不支持Right Join的解决办法GROUP BY
  • 2017-05-11交叉表查询sql语句
  • 2017-05-11Maven nexus 安装nexus私服出现的问题和解决办法
  • 2017-05-11postgres 数据库中的数据转换
  • 2017-05-11sqlserver和oracle中对datetime进行条件查询的一点区别小结
  • 2017-05-11数据库分页查询方法
  • 2017-05-11复杂系统中的用户权限数据库设计解决方案
  • 2017-05-11SQL数据库与oracle数据库镜像有什么不同对比

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQL中Having与Where的区别及注意
    • Select data from an Excel sheet in MSSQL
    • 数据库正规化和设计技巧
    • SQL Server不存在或访问被拒绝问题的解决第1/3页
    • SQL Server数据库性能优化技术第1/2页
    • Mybatis查询延迟加载详解及实例
    • Sql Server 和 Access 操作数据库结构Sql语句小结
    • 有效防止SQL注入的5种方法总结
    • 用计算列实现移动加权平均算法
    • 用户管理的备份(一致性备份、非一致性备份、脱机备份、联机备份)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有