假如我有一个表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)
直接用order by 和top结合的语句就可以实现。
创建表及插入数据:
create table test如上,插入25条数据,现在要求按ID排序,并取出ID从小到大的前20条数据,可用如下语句:
结果截图:
必须用三层么?
追答可以这样
SELECT * FROM (SELECT * FROM TABLE1 ORDER BY B DESC ) --降序
WHERE ROWNUM <= 20
能执行,但是结果不是SELECT A, B FROM A ORDER BY B此条语句执行的前20条。
能帮忙再想想么?
这例子都给你了 照猫画虎试两次就出来了 要怎么查询就怎么改呗