请教大家
with a as(select 111 id, 0 value from dualunion all
select 1111 id, 1 value from dual
union all
select 222 id, 3 value from dual
union all
select 333 id, 5 value from dual
union all
select 444 id, 1 value from dual
union all
select 555 id, 0 value from dual
union all
select 666 id, 2 value from dual
union all
select 777 id, 0 value from dual
union all
select 888 id, 1 value from dual
union all
select 999 id, 0 value from dual)
select * from a
大家可以看到 1111的值 1 和444的值1差两条2记录
444的值1 和888的值 1 差3条记录请教大家如何查出 相邻2条1之间的最大值例如上面的结果 就是查出 两条相邻1之间的 最大记录数为3
with a as(select 111 id, 0 value from dualunion all
select 1111 id, 1 value from dual
union all
select 222 id, 3 value from dual
union all
select 333 id, 5 value from dual
union all
select 444 id, 1 value from dual
union all
select 555 id, 0 value from dual
union all
select 666 id, 2 value from dual
union all
select 777 id, 0 value from dual
union all
select 888 id, 1 value from dual
union all
select 999 id, 0 value from dual)
select * from a
大家可以看到 1111的值 1 和444的值1差两条2记录
444的值1 和888的值 1 差3条记录请教大家如何查出 相邻2条1之间的最大值例如上面的结果 就是查出 两条相邻1之间的 最大记录数为3
解决方案 »
- ora-00942提示找不到表
- 一个ORACLE替换数据库的问题,急...................
- 请问oracle 9I 里面的clob字段为什么查询超慢
- oracle 驱动版本不同 导致查询结果不同
- 有没有方法在不知道列类型和数量的情况下插入一行?
- oracle9i客户端装不上
- 怎么用Oracle语句从数据库中定位数据啊!<在线等待>给分..........
- 请问,我手工创建了一个ORACLE数据库,并建一test/test用户时,在登录进入sqlplus时,出错:ORA-06553: PLS-213: package STANDARD not ac
- 这条sql语句怎么写?能写吗?
- LR:脚本回放时提示找不到请求的表单
- oracle 如何实现某个用户只能查询某条数据
- 在pl/sql里面写了oracle语句,分开能执行结果也出来了,但是连在一起不知道怎么办了,麻烦哪位有时间帮我改成能连贯执行起来的,修改的更好一些,不胜感激!
select a.*,ROWNUM RN from a ) T WHERE T.VALUE=1
from (select rn - lag(rn) over(order by rownum) - 1 rn
from (select a.*, rownum rn from a)
where value = 1)
select 1111 id, 1 value from dual
union all
select 222 id, 3 value from dual
union all
select 333 id, 5 value from dual
union all
select 444 id, 1 value from dual
union all
select 555 id, 0 value from dual
union all
select 666 id, 2 value from dual
union all
select 777 id, 0 value from dual
union all
select 888 id, 1 value from dual
union all
select 999 id, 0 value from dual)
select * from a
还有 如何查 例如 select 888 id, 1 value from dual
union all
select 999 id, 0 value from dual
相邻记录值 1 0
总共出现了几次相邻记录值 1 后面不是0的 总共出现了几次
你把整个表的所有数据传输到应用层,进行计算,得到一个结果。他把数据在数据库进行计算,传输到应用层一个结果,哪个可能的效率高?如果数据库不会瘫痪,那就把压力给数据库,如果数据库可能瘫痪,那就把压力给网络和应用层分担。
我们俩讨论的问题和这个帖子可能没啥关系了。从 应用服务器 ⇒ 数据库这样的层次角度来讲,应用服务器对数据库是多对一的关系。并不是说需要将所有数据传输到应用层去处理,而是说明显数据库应该做的事情,那就交给数据库去做。
例如数据过滤,集合运算(这个地方其实就需要讨论了,哪个要做哪个不要做)。而排序这样的事情,消耗大量的内存和IO,不用多,只要几十个DB Session同时做大量的排序,
自己在草纸上算算需要多少内存,需要多少临时表空间,数据库多痛苦,结果啥样我也不用说了。
而你排不排序,其实网络传输量是不变的。而且复杂的SQL语句的可维护性的难度也不言自明吧
(那种一句完成所有事情的SQL高手写的代码,是,SQL写的是很牛逼,但是带来的后期维护难度不亚于登珠穆朗玛峰)。我的观点是,数据库仅仅负责数据存取,尽量的要简洁,高效。
应用服务器可以负责一定的数据整理工作,这样整体的平衡更好。应用服务器挂了还可以加应用服务器,影响一小块,毕竟别的应用服务器和数据库还可以继续提供服务的。
你数据库服务器down了,影响度比应用服务器挂掉来的大的多(就算是你用的是数据库集群)。
在应用服务器上写代码需要内存和IO,但是负荷不会都集中在数据库服务器上,
我的目的是为了帮助数据库分担负荷。让大量数据排序最后拿走少量的几条,
说实在的,这样的数据库物理设计,或者是数据取得方式本身就需要重新检讨一下了,
这种目的的需求本身确实更多,但是为了达到这样的目的,肯定有更合适的方式,
真心不能这么折磨数据库。其实我想说的无非就是“平衡”二字,代码复杂度和可维护性的平衡,
数据库服务器和应用服务器之间的负荷平衡,内存消耗和处理时间的平衡,等等。偏了那一边儿都不好。
这也是我们IT人员应该沉淀经验的地方吧,也是最值钱的地方。