oracle select top 10查询记录语句

发布时间:2020-10-24编辑:脚本学堂
有关oracel中select top 10查询语句的实现方法,oracle适用ROWNUM来显示已经返回的结果。

在oracle的sql语句中,根据storage_db排序,并选择前10条记录,选择的内容是其他select语句列表。

以下语句,是可以正常运行的:
 

复制代码 代码示例:
select  distinct
  app_id ,
  name ,
  storage_gb ,
  history_created ,
  to_char ( history_date ,  'dd.mm.yyyy' )  as history_date
   from history where
      storage_gb is  not  null  and
        app_id not  in  ( select app_id
                        from history
                         where to_char ( history_date ,  'dd.mm.yyyy' )  =  '06.02.2009' )
 

但是,当加入:
 

and  rownum <=  10
order  by storage_gb desc


得到一些“随机”记录,错误的原因,可能是排序之前的限制条件。
另一个问题:这个查询是相当慢(超过一万条记录)。

需要把当前查询放到一个子查询中,如下:
 

复制代码 代码示例:
select  *  from  (
  select  distinct
  app_id ,
  name ,
  storage_gb ,
  history_created ,
  to_char ( history_date ,  'dd.mm.yyyy' )  as history_date
   from history where
    storage_gb is  not  null  and
      app_id not  in  ( select app_id from history where to_char ( history_date ,  'dd.mm.yyyy' )  = '06.02.2009' )
  order  by storage_gb desc  )
where rownum <=  10
 

oracle适用ROWNUM来显示已经返回的结果。
记录返回之后,可以筛选结果,所以子查询是很有不要的。

还可以使用rank()函数来获取前n个结果,要求高性能的话,可以使用not exists替代not in。