在Oracle SQL /分页中选择结果的范围(限制)
发布时间:2021-01-21 03:13:02 所属栏目:站长百科 来源:网络整理
导读:假设我们有下表: 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,000000000 1387797258001 7 2014.02.26 09:45:01,000000000 1387796687862 1 2014.02.26 09:45:01,000000000 1387800521317 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之间,也没有说明哪一个将被排除在外.为了避免这种情况,可以使用等级,这(再次,由窗口子句定义)分配相同的值相同属性的项目. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |