使用 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 行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章