可能存在断点,查询出连续的记录来
来源:互联网 发布:中印gdp算法对比 编辑:程序博客网 时间:2024/05/17 07:00
在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上的朋友给出了一个非常巧妙的答案:
SQL> SELECT b.fphm, MIN (b.kshm) Start_HM, MAX (b.kshm) End_HM
2 FROM (SELECT a.*, TO_NUMBER (a.kshm - ROWNUM) cc
3 FROM (SELECT *
4 FROM t
5 ORDER BY fphm, kshm) a) b
6 GROUP BY b.fphm, b.cc
7 /FPHM START_HM END_HM
---------- -------- --------
2013 00000120 00000122
2013 00000124 00000125
2014 00000001 00000005
2014 00000007 00000009
巧思妙想,就在一念之间。
create table t(fphm varchar2(4),kshm varchar2(8))
insert into t(fphm,kshm)
values(2014,'00000001');
insert into t(fphm,kshm)
values(2014,'00000002');
insert into t(fphm,kshm)
values(2014,'00000003');
insert into t(fphm,kshm)
values(2014,'00000004');
insert into t(fphm,kshm)
values(2014,'00000005');
insert into t(fphm,kshm)
values(2014,'00000007');
insert into t(fphm,kshm)
values(2014,'00000008');
insert into t(fphm,kshm)
values(2014,'00000009');
insert into t(fphm,kshm)
values(2013,'00000120');
insert into t(fphm,kshm)
values(2013,'00000121');
insert into t(fphm,kshm)
values(2013,'00000122');
insert into t(fphm,kshm)
values(2013,'00000124');
insert into t(fphm,kshm)
values(2013,'00000125');
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
- 可能存在断点,查询出连续的记录来
- oracle 查询出一段时间内连续时间间隔的记录集
- DFS 遍历数组所有可能存在的出栈顺序
- 查询表中连续的某几条记录
- SQL技巧之查询连续的记录
- 查询某表中存在重复的记录
- 更新查询出的多条记录
- mysql查询出所有重复的记录
- 如何查询出连续登陆的最长天数
- 如何查询出连续登陆的最长天数
- hibernate 用SQLQuery/HQL查询的 查询 记录是否存在。
- SQL语句,查询数据库中间连续的记录
- 从news表中查询第31至40条记录,主键为ID,ID可能不连续
- MySql高效的查询出随机记录的方法
- Oracle查询记录是否存在的效率问题
- Mongodb 查询存在 XX 字段的记录,删除某个列
- 用sql从数据库中查询出每月的记录
- 查询出重复的记录(两列)
- 如何创建非全屏对话框(zhuan)
- ASP.NET页面生命周期与应用程序生命周期
- hibernate在运行过程中出现
- 自定义operator new与operator delete的使用(2)
- 程序员的十层楼(4~5层)
- 可能存在断点,查询出连续的记录来
- Perl 学习总结
- AOP的基本概念
- 在ASP.Net中创建动态表格
- [转] ASP.NET 设计中的 N 个技巧
- 如何整合Apache和Tomcat (两种方式1.Apache自带的proxy 2.mod_jk 1.21(mod_jk-apache-2.2.4.so))
- linux tomcat5.5日志问题
- 科学与〝可证伪性〞
- JavaScript二叉树