SQL查询排序后前20条语句

假如我有一个表A,里面有一个普通字段A和时间字段B,使它按时间排序后筛选出前20条记录,求解各位大侠SQL怎么写,数据库是ORACLE的。
上面问题有点错,

假如我有一个表A,里面有一个普通字段C,D和时间字段B,使它按C="xxx"筛选得出的结果按时间排序后筛选出前20条记录,

select C,D,B from A where C="XXX" and rownum <= 20 order by B;
的出的结果并不是按
select C,D,B from A where C="XXX" order by B;
语句查出来的前20条,求解啊。。

SELECT C.D FROM (

SELECT C,D,ROWNUM RN FROM (

SELECT T.* FROM TABLE1 ORDER BY B DESC --降序

) T1

) WHERE RN <= 20

注:用ROWNUM的话,你要先排好序,然后再用ROWNUM生成伪列,再限制行数。

扩展资料:

关于sql语句查询排序

一、sql查询单词

order by 是用在where条件之后,用来对查询结果进行排序

order by 字段名 asc/desc  

asc 表示升序(默认为asc,可以省略)

desc表示降序

order by 无法用于子查询,否则会报错:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

二、关联查询(左外查询)(jt项目菜单查询)

<select id="findObjects" resultMap="map">

select c.*,p.name parentNam

from sys_menus c left join sys_menus p

on c.parentId=p.id

三、用ORDER BY 子句

SELECT <列名列表> FROM <表名>[WHERE 条件]ORDER BY <字段名1> [ASC|DESC] [ ,字段名2 [ASC|DESC] ] [,...n]--order by <字段名1> (不写ASC|DESC, 则默认升序ASC)

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-05

直接用order by 和top结合的语句就可以实现。

创建表及插入数据:

create table test
(id int,
name varchar(20))

insert into test values (1,'百度知道团长')
insert into test values (3,'du小智')
insert into test values (4,'du小佑')
insert into test values (6,'du小短')
insert into test values (8,'du知了')
insert into test values (2,'李白')
insert into test values (5,'杜甫')
insert into test values (7,'白居易')
insert into test values (9,'孟浩然')
insert into test values (10,'王维')
insert into test values (11,'吕布')
insert into test values (13,'赵云')
insert into test values (14,'典韦')
insert into test values (16,'关羽')
insert into test values (18,'马超')
insert into test values (12,'孙悟空')
insert into test values (15,'猪八戒')
insert into test values (17,'沙和尚')
insert into test values (19,'唐僧')
insert into test values (20,'白龙马')
insert into test values (21,'宋江')
insert into test values (23,'卢俊义')
insert into test values (24,'吴用')
insert into test values (26,'公孙胜')
insert into test values (28,'关胜')

如上,插入25条数据,现在要求按ID排序,并取出ID从小到大的前20条数据,可用如下语句:

select top 20 * from test order by id;

结果截图:

第2个回答  2013-11-28
用ROWNUM的话,你要先排好序,然后再用ROWNUM生成伪列,再限制行数。
SELECT C.D FROM (
SELECT C,D,ROWNUM RN FROM (
SELECT T.* FROM TABLE1 ORDER BY B DESC --降序
) T1
) WHERE RN <= 20追问

必须用三层么?

追答

可以这样
SELECT * FROM (SELECT * FROM TABLE1 ORDER BY B DESC ) --降序
WHERE ROWNUM <= 20

本回答被提问者采纳
第3个回答  2013-11-28
SELECT A, B FROM
(SELECT A, B FROM A ORDER BY B)
WHERE ROWNUM <= 20(抽出记录数)
ORDER BY ROWNUM ASC追问

能执行,但是结果不是SELECT A, B FROM A ORDER BY B此条语句执行的前20条。

能帮忙再想想么?

追答

这例子都给你了 照猫画虎试两次就出来了 要怎么查询就怎么改呗

第4个回答  2013-11-28
select top 20 字段A from 表 order by 时间