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

jd29323 2002-06-03 07:23:13
我有一个表:
name varchar
address varchar
sex char
.....
我希望用SELECT语句取到按照name字段降序的30到50之间的记录
我几得好象是应该 select .... in (select ....) 这样写
但我不知道怎么写
...全文
201 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,598

社区成员

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

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