在Oracle SQL 分页中选择结果的范围(限制)

在Oracle SQL 分页中选择结果的范围(限制),第1张

概述假设我们有下表: CREATE TABLE "ARTICLE_COUNTER_STATISTICS_M"( "ID" NUMBER(19,0) NOT NULL ENABLE, "ITEMCOUNT" NUMBER(19,0), "VERSION" TIMESTAMP (6) DEFAULT SYSTIMESTAMP) 唯一约束是ID和VERSION字段. 可能在DB 假设我们有下表:

CREATE table "ARTICLE_COUNTER_STATISTICS_M"(  "ID"        NUMBER(19,0) NOT NulL ENABLE,"ITEMCOUNT" NUMBER(19,0),"VERSION" TIMESTAMP (6) DEFAulT SYSTIMESTAMP)

唯一约束是ID和VERSION字段.

可能在DB中的某些行的示例(时间戳对于所有记录始终相同):

1374659422641   22  2014.02.26 09:45:01,0000000001387797258001   7   2014.02.26 09:45:01,0000000001387796687862   1   2014.02.26 09:45:01,0000000001387800521317   1   2014.02.26 09:45:01,000000000

现在,如果我们想要选择ID,itemcount并按itemcount对它们进行排序,我们将执行以下 *** 作:

SELECT ID,SUM(itemcount) as count,version FROM ARTICLE_COUNTER_STATISTICS_m WHERE ID != '0' GROUP BY ID,version ORDER BY version DESC,SUM(itemcount) DESC

但是目前还不清楚的是,我们如何仅在一定范围内选择结果.例如10至20项最重要的项目?我试过这样的事情:

SELECT ID,count,version FROM(     SELECT ID,version     FROM ARTICLE_COUNTER_STATISTICS_m     WHERE ID != '0'     GROUP BY ID,version     ORDER BY version DESC,SUM(itemcount) DESC ) where rownum >= 0 and rownum <= 20

但是,如果“rownum> = n”中的n大于1(它只返回空结果),则无效.我知道可能必须使用ROW_NUMBER()函数来实现目标,但我无法让它工作.有任何想法吗?谢谢!

解决方法 这是一个row_number示例:

SELECT * FROM   (SELECT ID,itemcount,version,ROW_NUMBER() OVER (ORDER BY version DESC,itemcount DESC) AS rn        FROM   (SELECT ID,SUM(itemcount) as itemcount,version                 FROM ARTICLE_COUNTER_STATISTICS_m                 WHERE ID != '0'                 GROUP BY ID,version               )        )WHERE  rn BETWEEN 3 AND 20 -- just an example

请注意,row_number为具有相同属性的项目分配任意顺序(根据window子句).所以,如果例如,你的前三个项目均具有版本= 100 = ITEMCOUNT 100和您使用RN 2和4之间,也没有说明哪一个将被排除在外.为了避免这种情况,可以使用等级,这(再次,由窗口子句定义)分配相同的值相同属性的项目.

总结

以上是内存溢出为你收集整理的在Oracle SQL /分页中选择结果的范围(限制)全部内容,希望文章能够帮你解决在Oracle SQL /分页中选择结果的范围(限制)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存