oracle 多字段排序,取连续的某个区

按a,b,c三个字段排序,再取某两条记录中间的全部记录。

假设 a,b,c全是数值型。我想取 (a,b,c)=(1,3,1) 和 (a,b,c)=(4,1,2)这两条记录之间的记录。

where (a between 1 and 4) and (b between 3 and 1) and (c between 1 and 2)类似这样的答案就别来添乱了。不信的话自己试试,一条记录也不可能返回。

我现在用的是 where (a >1 and a3) or (a=1 and b=3 and c>1) or (a=4 and b<1) or ( a=4 and b=1 and c<2)
但是如果条件字段再多的话,where会很长。请问有没有什么高大上一点的写法。

2个回答

用rownum 试试?

u012112909
董松建 用row_number() 排序的那段代码重复了三次,还有没有更简洁的写法?
3 年多之前 回复
u012112909
董松建 select a,b,c from( select a,b,c, row_number() over (order by a,b,c) lv from tb ) where lv between ( select lv from (select a,b,c, row_number() over (order by a,b,c) lv from tb) where a=1 and b=3 and c=1) and ( select lv from (select a,b,c, row_number() over (order by a,b,c) lv from tb) where a=4 and b=1 and c=2)
3 年多之前 回复

如果a,b,c的取值范围比较小的话(比如不超过9):WHERE (a*100+b*10+c) BETWEEN 132 AND 411

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐