问答一下,轻松解决,电脑应用解决专家!
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win10/Win11
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascriptLinux系统
PHP教程CSS教程XML教程

Oracle查询排序后的前10条记录

更新时间:2022-04-21 11:05 作者:leo_qiu_s点击:

查询表CMS_GPS中,车牌号为“苏EFN588”,时间最近的前10条记录,

不可以写成下面这样,这样写是先搜索出前10条记录,然后再按时间倒序排列,

SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' AND ROWNUM <11 ORDER BY TIMESTAMPS DESC;

第一种方法:

先查子表,按时间排序,并添加序号,主表查字表时筛选序号<11的,

select * from
(select GG.*,rownum rn from (select * from CMS_GPS  WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC)GG)
where rn <11;

注意

  1. * 和 ROWNUM 一起查询时候,*前面必须加表名称做前缀,即 select CG.* , ROWNUM.....
  2. ROWNUM 不能以任何表的名称作为前缀,CG.ROWNUM 是非法的。
  3. rownum和排序:rownum在前,order by在后,rownum的是在取数据的时候产生的序号,而不是order by后产生的序号,想要按照排序后的结果编号,必须用子查询。

SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
可以看出,rownum并不是按照排序后的列来生成的序号。系统是按照记录插入时的顺序来编号的

为了获得排序后的编号,必须使用子查询;
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 李三
2 200002 王二
3 200001 张一
4 200004 赵四

第一种效率低,提供效率更高的第二种方法,

第二种方法:

先查字表,按时间排序,主表查字表时,自动生成伪列,并查询伪列ROWNUM<11的,

SELECT * FROM 
(SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC)
WHERE rownum < 11;

查询第5-10条数据:

select * from (select CG.*,rownum as rn from CMS_GPS CG where VEHICLE_NO = '苏EFN588' and rownum<11) where rn>6;

查询时间最近的第5-10条数据:

select * from 
	(SELECT aaa.*,ROWNUM rn FROM 
		(SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC) aaa
		WHERE rownum < 11
	)
where rn>4;

错误示范:

ORACLE查询第N~M条记录的方法:

select * from (select a.*,a.rownum rn from (select * from table_name) a where a.rownum<M) where rn>n
--这句就是从n到m也的数据,分为三层结构

第一个错误:rownum前面不可以加表名做前缀,第二,三层结构太繁琐,可以优化为二层结构,

select * from (select a.*,rownum rn from table_name a where rownum<M) where rn >n;

MYSQL查询前10条、第2~10条记录的方法:

select * from table_name limit 0,10  --通常0是可以省略的,直接写成  limit 10。0代表从第0条记录后面开始,也就是从第一条开始
select * from table_name limit 1,10  --则为从第一条后面的记录开始展示,也就是说从第二条开始。

MSSQL查询前10条的方法为:

select top X * from table_name  --查询前X条记录,可以改成需要的数字。
select top n * from (select top m * from table_name order by column_name ) a order by column_name desc  --查询第N到M条记录。常用的分页也是这种方式。
例如常用的分页方式:
declare @page int
declare @row int
set @page=2 --页数
set @row=3  --每页展示行数
select top (@row) * from (select top (@row*@page) * from table_name order by id  ) a order by id desc  --最基本的分页方式,改变@row和@page达到分页效果
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容