现在有个分页查询,要依次执行两条语句,
一条取得符合条件的总行数,另一条来取得指定页的数据,分别如下
取得总行数
select max(RN) 总行数 from
(SELECT row_number() over(order by ID desc) RN FROM Table1
group by SIGNATURE,GRADE,CITY,REG_TIME
)t2结果
————
总行数
20000
取得第一页的行数
select t2.* from
(
SELECT SIGNATURE,GRADE,CITY,REG_TIME
count(*) 小计,row_number() over(order by ID desc) 行序
FROM Table1
WHERE GRADE=1 AND
to_char(REG_TIME,'yyyy-mm-dd hh24:mi:ss') <='2010-12-23 23:59:59'
group by SIGNATURE,GRADE,CITY,REG_TIME
)t2 where RN > 1 and RN <= 10结果
————
SIGNATURE GRADE CITY REG_TIME 小计 行序
wow 1 lg ..... 15 1
wow 1 ttt ..... 44 2
wow2 3 fsdd ..... 600 3
wow3 1 dfsf ..... 233 4
wow3 2 rehhh ..... 322 5
........
问题:这两个操作都很耗时,每个大概30秒左右,不知道能不能合为一个比较高效的语句,
执行一次就可得到下面的结果总行数 SIGNATURE GRADE CITY REG_TIME 小计 行序
20000 wow 1 lg ..... 15 1
20000 wow 1 ttt ..... 44 2
20000 wow2 3 fsdd ..... 600 3
20000 wow3 1 dfsf ..... 233 4
20000 wow3 2 rehhh ..... 322 5
...........谢谢指教
一条取得符合条件的总行数,另一条来取得指定页的数据,分别如下
取得总行数
select max(RN) 总行数 from
(SELECT row_number() over(order by ID desc) RN FROM Table1
group by SIGNATURE,GRADE,CITY,REG_TIME
)t2结果
————
总行数
20000
取得第一页的行数
select t2.* from
(
SELECT SIGNATURE,GRADE,CITY,REG_TIME
count(*) 小计,row_number() over(order by ID desc) 行序
FROM Table1
WHERE GRADE=1 AND
to_char(REG_TIME,'yyyy-mm-dd hh24:mi:ss') <='2010-12-23 23:59:59'
group by SIGNATURE,GRADE,CITY,REG_TIME
)t2 where RN > 1 and RN <= 10结果
————
SIGNATURE GRADE CITY REG_TIME 小计 行序
wow 1 lg ..... 15 1
wow 1 ttt ..... 44 2
wow2 3 fsdd ..... 600 3
wow3 1 dfsf ..... 233 4
wow3 2 rehhh ..... 322 5
........
问题:这两个操作都很耗时,每个大概30秒左右,不知道能不能合为一个比较高效的语句,
执行一次就可得到下面的结果总行数 SIGNATURE GRADE CITY REG_TIME 小计 行序
20000 wow 1 lg ..... 15 1
20000 wow 1 ttt ..... 44 2
20000 wow2 3 fsdd ..... 600 3
20000 wow3 1 dfsf ..... 233 4
20000 wow3 2 rehhh ..... 322 5
...........谢谢指教
解决方案 »
- 求助:oracle oci OCIEnvCreate 崩溃
- 虛擬字段
- select语句问题
- 请教数据库专家:我想深入学习数据库,数据库相关的东西包含那些 ?
- 关于裸设备上的ORACLE问题,十分不解
- 急......小弟在线等侍..回复有分
- 为什么lsnrctl启动不了,在sqlplus下不提供主机服务名可以连接到数据库
- ORA-12541: TNS: 没有监听器?
- bitmap index 的含义是啥?
- 请问ORACLE 8.17 和ORACLE 8.05可以安装在同一台WIN 2000的机器上吗?
- 这个参数 ._partition_large_extents
- 求助:两表之间更新备份,更新多个字段,uodate触发器应该怎么写,具体见内,ths。
select t2.*
from (SELECT count(*) over(order by 1) totalrow,
SIGNATURE,
GRADE,
CITY,
REG_TIME count(*) 小计,
row_number() over(order by ID desc) 行序
FROM Table1
WHERE GRADE = 1
AND to_char(REG_TIME, 'yyyy-mm-dd hh24:mi:ss') <=
'2010-12-23 23:59:59'
group by SIGNATURE, GRADE, CITY, REG_TIME) t2
where RN > 1
and RN <= 10
SELECT t2.*
FROM (SELECT SIGNATURE, GRADE, CITY, REG_TIME, COUNT(*) over() 总计,
COUNT(*) over(PARTITION BY SIGNATURE, GRADE, CITY, REG_TIME) 小计,
row_number() over(PARTITION BY SIGNATURE, GRADE, CITY, REG_TIME ORDER BY ID DESC) 行序
FROM Table1
WHERE GRADE = 1
AND to_char(REG_TIME, 'yyyy-mm-dd hh24:mi:ss') <=
'2010-12-23 23:59:59') t2
WHERE RN > 1
AND RN <= 10