我想用select语句取30-50之间的记录,这样SQL语句怎么写呢?????

jd29323 2002-06-03 07:23:13
我有一个表:
name varchar
address varchar
sex char
.....
我希望用SELECT语句取到按照name字段降序的30到50之间的记录
我几得好象是应该 select .... in (select ....) 这样写
但我不知道怎么写
...全文
122 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
moses_78 2002-06-06
  • 打赏
  • 举报
回复
建临时表,按name排序后倒入,再采用rownum的方法解决。
moses_78 2002-06-06
  • 打赏
  • 举报
回复
楼上的方法好像不行,rownum是插入记录时分配的,按name排序后rownum就乱了
forest 2002-06-05
  • 打赏
  • 举报
回复
jaderiver() 的方法确实有问题,rownum总是从1开始的。
wwl007(疑难杂症)的方法是可行的。
KingSunSha(弱水三千) 的方法可行,而且比wwl007(疑难杂症)的方法效率更高,因为minus运算耗费资源更大。
其他人的我感觉好像不对。

tomcat1022 2002-06-05
  • 打赏
  • 举报
回复
select * from ( (select * from tablename where rownum<=51) minus (select * from tablename where rownum<=30) )


test this way.
jaderiver 2002-06-04
  • 打赏
  • 举报
回复
select rownum, name, address, sex ...
from (select rownum, name, address, sex ...
from tablename
order by name desc)
where rownum between 30 and 50;

rowid与rownum不是一回事。

gyang 2002-06-04
  • 打赏
  • 举报
回复
select * from (select rownum row_id,name,... order by id desc) where row_id between 30 and 50
biti_rainy 2002-06-04
  • 打赏
  • 举报
回复
大家都是表达一个意思
只是有的人错了有的人对了 :)

mimimi 2002-06-04
  • 打赏
  • 举报
回复
还是采纳弱水兄的吧
wwl007 2002-06-04
  • 打赏
  • 举报
回复
说明:我对以上的方法不太同意,因为rownum是后期定的只能用小于符号<!
between 不能用!
select name from tablename where rownum<50
minus
select name from tablename where rownum<10
KingSunSha 2002-06-04
  • 打赏
  • 举报
回复
比较常用的写法我想应该是:
select name, address, sex ...
from (select rownum rno, name, address, sex ...
from mytable
where rownum <= 50
order by name desc)
where rno >= 30;

请注意:在子查询中使用order by子句只有在8i或以上的版本中支持
3yugui 2002-06-03
  • 打赏
  • 举报
回复
由于单纯地使用ROWNUM无法实现对于查询的排序, 下面是一个简单的利用例子:

select username,rownum from dba_users
where rownum < 4 order by username;

USERNAME ROWNUM
-------------------------- ------
OUTLN 3
SYS 1
SYSTEM 2

这样就可以通过取得记录然后排序解决问题:

SELECT username,rownum FROM
(SELECT username FROM dba_users ORDER BY username)
WHERE ROWNUM < 4;
USERNAME ROWNUM
-------------------------- ------
AURORA$ORB$UNAUTHENTICATED 1
CTXSYS 2
DBSNMP 3

一个(>)符号和 rownum 一起使用时遇到负数则不会有结果:

1 SELECT username,rownum FROM
2 (SELECT username FROM dba_users ORDER BY username)
3* WHERE ROWNUM > 4
SQL> /
no rows selected

要显示最末的三条记录就不能使用(>):

1 SELECT username,rownum FROM
2 (SELECT username FROM dba_users ORDER BY username desc)
3* WHERE ROWNUM < 4
SQL> /


USERNAME ROWNUM
-------------------------- ------
TESTUSER 1
SYSTEM 2
SYS 3

biti_rainy 2002-06-03
  • 打赏
  • 举报
回复
楼上的
你的函数用错了
不应该是rank() over()

请完全参考楼上的意见,把 rank() 换成 row_number()就正确了

另,这两个函数只在817以上版本支持

btw:可以采用rownum解决,8i版本支持

select ... from
(
select rownum num,....
from
(
select * from xxx order by a
)
)
where num < ? and num > ?
hammer_shi 2002-06-03
  • 打赏
  • 举报
回复
杩欎竴鍙ユ槸姹侷D鍙峰湪15鍒?00涔嬮棿鐨勮褰曪紝浣犳敞鎰忚浆鍖栦竴涓嬪惂锛? select caseregister from (select rank() over (order by caseregister desc) rank1 caseregister from caseregister order by
caseregister desc ) ss where ss.rank1>15 and ss.rank1<100 order by caseregister ;

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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