ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 348|回复: 5

[PL/SQL] 请教SQL的写法

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
跳转到指定楼层
1#
发表于 2017-12-2 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在有数据

序号         值
1              100
2               200
4               300
7               500
8               600
9                800
现在需要把序号不连续的记录挑出来,期望结果如下:

序号A    序号B   值A    值B
2               4      200    400
4              7      300      500


请问该如何实现
论坛徽章:
4
秀才
日期:2017-08-11 15:38:46秀才
日期:2017-09-08 11:09:50秀才
日期:2017-09-25 15:10:28秀才
日期:2017-09-25 15:10:28
2#
发表于 2017-12-3 12:59 | 只看该作者
值b是400为什么
来自苹果客户端来自客户端

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
3#
 楼主| 发表于 2017-12-3 14:37 | 只看该作者
却早已分离 发表于 2017-12-3 12:59
值b是400为什么

写错了,应该是300
来自安卓客户端来自客户端

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
4#
 楼主| 发表于 2017-12-3 14:39 | 只看该作者
上面写错了,更正一下:
现在有数据

序号         值
1              100
2               200
4               300
7               500
8               600
9                800
现在需要把序号不连续的记录挑出来,期望结果如下:

序号A    序号B   值A    值B
2               4      200    300
4              7      300      500

使用道具 举报

回复
论坛徽章:
4
秀才
日期:2017-08-11 15:38:46秀才
日期:2017-09-08 11:09:50秀才
日期:2017-09-25 15:10:28秀才
日期:2017-09-25 15:10:28
5#
发表于 2017-12-3 19:35 | 只看该作者
with t as (
select '1' as a1,'100' as a2 from dual
union all
select '2' as a1,'200' as a2 from dual
union all
select '4' as a1,'300' as a2 from dual
union all
select '7' as a1,'500' as a2 from dual
union all
select '8' as a1,'600' as a2 from dual
union all
select '9' as a1,'800' as a2 from dual )
SELECT a1, b, a2, c
  FROM (SELECT t.*,
               lead(a1) over(ORDER BY a1) b,
               lead(a2) over(ORDER BY a1) c
          FROM t) x
WHERE x.b - x.a1 > 1;

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
6#
发表于 2017-12-4 22:33 | 只看该作者

with t as (
select '1' as a1,'100' as a2 from dual
union all
select '2' as a1,'200' as a2 from dual
union all
select '4' as a1,'300' as a2 from dual
union all
select '7' as a1,'500' as a2 from dual
union all
select '8' as a1,'600' as a2 from dual
union all
select '9' as a1,'800' as a2 from dual )
select * from (
select t.*
      ,lead(a1) over(order by a1) next_a1
      ,lead(a2) over(order by a1) next_a2
from t
)
where next_a1<>a1+1;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表