使用 GROUP BY 和 ORDER BY pl/sql 获取结果集的 N 到 M 行 [重复]

Posted

技术标签:

【中文标题】使用 GROUP BY 和 ORDER BY pl/sql 获取结果集的 N 到 M 行 [重复]【英文标题】:Getting rows N through M of a result set using GROUP BY and ORDER BY pl/sql [duplicate] 【发布时间】:2015-11-02 08:14:32 【问题描述】:

我需要转换以下查询以返回从任何 LOWERBOUND 到 UPPERBOUND(任何 N 到 M)的特定行数。

SELECT * FROM (
  SELECT 
    OWNER||','||HOSTNAME OWNER,
    SubStr(FILENAME,InStr(FILENAME,'/',-1)+1,Length(FILENAME)-InStr(FILENAME,'/',-1)+1)  a, 
    To_Date(SubStr(FILENAME,InStr(filename,'_',1)+1,14),'YYYYMMDDHH24MISS') STARTIME,
    servergrp Server_Group,
    filename, 
    Count(1) b  
  FROM patcheventlog  
  GROUP BY 
    OWNER||','||HOSTNAME ,
    SubStr(FILENAME,InStr(FILENAME,'/',-1)+1,Length(FILENAME)-InStr(FILENAME,'/',-1)+1)  ,  
    To_Date(SubStr(FILENAME,InStr(filename,'_',1)+1,14),'YYYYMMDDHH24MISS') ,
    servergrp,
    filename  
  order by 
    Startime desc 
)
where  
  rownum<=10

通过使用上面的 rownum 概念,我只能获得从第一行到定义的 rownum 的结果集。如上从 1 到 10。

所以请帮我解决这个问题。

谢谢

【问题讨论】:

@anishroniyar..insetad of rownum 在分区上使用 row_number() ... 【参考方案1】:

示例供参考。我们需要做到以下几点:

select * from (
select OWNER,a,STARTIME,Server_Group,filename,b ,row_number() over (order by STARTIME desc ) rnm from
(
  SELECT 
    OWNER||','||HOSTNAME OWNER,
    SubStr(FILENAME,InStr(FILENAME,'/',-1)+1,Length(FILENAME)-InStr(FILENAME,'/',-1)+1)  a, 
To_Date(SubStr(FILENAME,InStr(filename,'_',1)+1,14),'YYYYMMDDHH24MISS') STARTIME,
    servergrp Server_Group,
    filename, 
    Count(1) b  
  FROM patcheventlog  
  GROUP BY 
    OWNER||','||HOSTNAME ,
    SubStr(FILENAME,InStr(FILENAME,'/',-1)+1,Length(FILENAME)-InStr(FILENAME,'/',-1)+1)  ,  
    To_Date(SubStr(FILENAME,InStr(filename,'_',1)+1,14),'YYYYMMDDHH24MISS') ,
    servergrp,
    filename 
   ORDER BY 
    Startime desc )
) WHERE rnm BETWEEN 2 AND 7

【讨论】:

感谢您的查询,但此查询将 rnm 列的所有值设置为 1。它不会连续设置 rnm 列。那么这里面有什么? @anishroniyar ..实际上我已经使用了分区子句中的所有列..生成 row_number 连续使用分区子句中的列,其值在所有行中都相同...... 是的,我已经编辑过了。感谢您的帮助朋友。 @anishroniyar..这里是方向的小提琴...sqlfiddle.com/#!4/67833/1 @anishroniyar..很高兴为您提供帮助..:)

以上是关于使用 GROUP BY 和 ORDER BY pl/sql 获取结果集的 N 到 M 行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sql语句执行顺序之group by、order by

sql中group by和order by的区别

order by 和 group by 的区别

GROUP BY 和 ORDER BY一起使用时,要注意的问题!

一起使用 ORDER BY 和 GROUP BY

GROUP BY 和 ORDER BY一起使用