表记录
======================================
name date score
Fei Zhang 1 100
Fei Zhang 2 99
Fei Zhang 3 100
Fei Zhang 4 100
Fei Zhang 5 98
Fei Zhang 6 100
Fei Zhang 7 100
Fei Zhang 8 100
Fei Zhang 9 100
Fei Zhang 10 60现要求统计张飞同学各次测验的得满分的情况,包括持续满分次数和总满分次数,需要得到游标如下
======================================
name date score uninterrupted_100 total_100
Fei Zhang 1 100 1 1
Fei Zhang 3 100 1 2
Fei Zhang 4 100 2 3
Fei Zhang 6 100 1 4
Fei Zhang 7 100 2 5
Fei Zhang 8 100 3 6
Fei Zhang 9 100 4 7
帮帮忙,要则们写才行?
======================================
name date score
Fei Zhang 1 100
Fei Zhang 2 99
Fei Zhang 3 100
Fei Zhang 4 100
Fei Zhang 5 98
Fei Zhang 6 100
Fei Zhang 7 100
Fei Zhang 8 100
Fei Zhang 9 100
Fei Zhang 10 60现要求统计张飞同学各次测验的得满分的情况,包括持续满分次数和总满分次数,需要得到游标如下
======================================
name date score uninterrupted_100 total_100
Fei Zhang 1 100 1 1
Fei Zhang 3 100 1 2
Fei Zhang 4 100 2 3
Fei Zhang 6 100 1 4
Fei Zhang 7 100 2 5
Fei Zhang 8 100 3 6
Fei Zhang 9 100 4 7
帮帮忙,要则们写才行?
解决方案 »
- 获取case when的值 在线等。。
- 怎么解决oracle缓存问题
- ORacle 10G安装完后为什么不出现DataBase Configeration assistiant
- [欢迎讨论]number型和varchar型索引测试
- oracle 的大数据多表查询怎么优化
- 你确定 LENGTH('中国') = 2吗?
- 在不同的系统上装了oracle 要怎样才能调通
- 求助 触发器!
- oracle、sqlserver数据库的SQL语法有何异同?
- 使用sql worksheet时出错,提示“ORA-12560:TNS:协议适配器错误”?(在线给分)
- 请教排序所用内存
- 求阵列卡NETRAID-3SI for rhel4u4的驱动
from(
select *,sum(temp_flag) over(order by date) group_flag
from(
select *,case when date-lag(date,1,0) over(order by date)>1 then 1 else 0 end temp_flag
from table
where score=100))
dt number,
score number);select name,dt,score,row_number()over(partition by score,rn order by dt) uninterrupted_100,
row_number()over(order by dt) total_100
from(
select b.*,row_number()over(order by dt)-row_number()over(partition by score order by dt) rn from b)
where score=100;
我也写个
with tt as(select 'feiz' name,1 date1,100 score from dual union all
select 'feiz' name,2 ,99 score from dual union all
select 'feiz' name,3 ,100 score from dual union all
select 'feiz' name,4 ,100 score from dual union all
select 'feiz' name,5 ,98 score from dual union all
select 'feiz' name,6 ,100 score from dual union all
select 'feiz' name,7 ,100 score from dual union all
select 'feiz' name,8 ,100 score from dual union all
select 'feiz' name,9 ,100 score from dual union all
select 'feiz' name,10 ,60 score from dual)
select name,date1,score,
dense_rank()over(partition by name,date1-rownum order by date1)uninterrupted_100,
row_number()over(partition by name order by date1)total_100
from tt
where score=100
如果date字段是日期型的,改成下面的比较保险
select name,date,score,
dense_rank()over(partition by name,date-rn order by date)uninterrupted_100,
row_number()over(partition by name order by date)total_100
from (
select tt.*,row_number()over(partition by name order by date)rn from tt
where score=100)
不过如果内存比较吃紧,rollup和window函数是要消耗额外的排序工作区的,不建议使用,毕竟磁盘排序的成本是比较高的.