请教一Sql

chinazhousheng 2011-12-19 02:15:17
我有一个表,结果如下
labelID pointID

labelID为主键,其表内容可能为
1 1003
2 1001
3 1008
4 1010
5 1021
6 1023
7 1031
8 1018
9 1013
10 1025

现在要求pointID 1022前后3条记录(即大于1022的三条记录和小于1022的三条记)
要求高效
...全文
83 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xpingping 2011-12-19
  • 打赏
  • 举报
回复
select labelID,pointID from (select labelID,pointID,abs(pointID-1022) cha 
from table_test where pointID <1022 order by cha)where rownum<=3
union all
select labelID,pointID from (select labelID,pointID,abs(pointID-1022) cha
from table_test where pointID >=1022 order by cha)where rownum<=3

前面给的错了,sorry
我心飞翔 2011-12-19
  • 打赏
  • 举报
回复
实测数据:

-- 查询PointID大于1022的前3条记录和小于1022的三条记录
CREATE TABLE T65
(
LabelID NUMBER(4),
PointID NUMBER(4)
);

INSERT INTO T65 VALUES(1, 1033);
INSERT INTO T65 VALUES(2, 1001);
INSERT INTO T65 VALUES(3, 1008);
INSERT INTO T65 VALUES(4, 1010);
INSERT INTO T65 VALUES(5, 1021);
INSERT INTO T65 VALUES(6, 1023);
INSERT INTO T65 VALUES(7, 1031);
INSERT INTO T65 VALUES(8, 1018);
INSERT INTO T65 VALUES(9, 1013);
INSERT INTO T65 VALUES(10, 1025);


实测结果:

princes1 2011-12-19
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT A.*, ROW_NUMBER() OVER(ORDER BY pointID) RN FROM test_o A),
(SELECT MAX(RN + 3) AS HI ,min(RN)-3 LOW
FROM (SELECT A.*, ROW_NUMBER() OVER(ORDER BY pointID) RN FROM test_o A)
WHERE pointID = 1005) B
WHERE RN <=HI AND RN>=LOW
;
princes1 2011-12-19
  • 打赏
  • 举报
回复
如果pointID有重复的话 需要优化
princes1 2011-12-19
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT A.*, ROW_NUMBER() OVER(ORDER BY pointID) RN FROM test_o A),
(SELECT RN + 3 AS HI ,RN-3 LOW
FROM (SELECT A.*, ROW_NUMBER() OVER(ORDER BY pointID) RN FROM test_o A)
WHERE pointID = 1005) B
WHERE RN <=HI AND RN>=LOW
;
xpingping 2011-12-19
  • 打赏
  • 举报
回复
select labelID,pointID from 
(select labelID,pointID,abs(pointID-1022) cha from table_test order by cha)
where rownum<=6 order by labelID

也是pointID 不是number,to_number()
yanyuan1024 2011-12-19
  • 打赏
  • 举报
回复
一条SQL 有难度啊,用rownum?
chinazhousheng 2011-12-19
  • 打赏
  • 举报
回复
望给思路
qinglang1987 2011-12-19
  • 打赏
  • 举报
回复
一个sql么办法搞定啊,写个函数或者存储过程吧

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧