求一SQL语句:
line day adr
A 1 a
A 2 a
A 3 b
A 4 a
B
。
得出结果
A 2 a
A 1 b
A 1 a
中间值为(相同line,adr时)连续的天数
line day adr
A 1 a
A 2 a
A 3 b
A 4 a
B
。
得出结果
A 2 a
A 1 b
A 1 a
中间值为(相同line,adr时)连续的天数
解决方案 »
- win 2003 32位 oracle10g数据库PGA分配问题
- oracle io计算问题
- 求助一个oracle sql语句
- 想学ORCL的话,有必要学JAVA么?
- 请问我的ORACLE装在C盘,由于数据的增加,现在存储空间不够,我怎么才能让数据自动存储到其它的盘上?
- !!!急~~高手帮忙来解决,真难啊!-_-b
- 超简单Trigger,求救
- *****存储过程的一个小问题
- 表在用户模式间的移动问题?
- 请问在Delphi中如何访问Oracle数据库
- ORACLE有象MS SQL SERVER一样的开发版吗,我想在XP下搞开发
- 使用OCCI,程序中调用存储过程,报pls-00201, 必须声明标示符?
读出所有的记录,循环判断
设置全局变量line和adr,累加器
如果line和adr相同:累加
如果不同,将line,累加值,adr记录起来,更新line,adr的值,累加器清零
这样的话要嵌套循环,感觉性能很差,有没有更好的办法,比如聚合函数
select line,count(1),adr
from (select line,day,adr,
(case lag(line,1,'') over(order by day)=line and lag(adr,1,'') over(order by day)=adr then lag(day,1,1) over(order by day) else day end) aa
from table order by day)
group by aa order by max(day);
from (select line,day,adr,
(case when lag(line,1,'') over(order by day)=line and lag(adr,1,'') over(order by day)=adr then lag(day,1,1) over(order by day) else day end) aa
from table order by day)
group by aa order by max(day);
SQL> SELECT * FROM TT;LINE DAYS ADR
---- ---------- ---
A 1 A
A 2 A
A 3 B
A 4 ASQL> SELECT LINE, COUNT(1) COUNTS, ADR
2 FROM (SELECT TT.*,
3 ROWNUM - ROW_NUMBER() OVER(PARTITION BY LINE, ADR ORDER BY ROWNUM) RN
4 FROM TT) ZZ
5 GROUP BY LINE, ADR, RN;LINE COUNTS ADR
---- ---------- ---
A 2 A
A 1 B
A 1 A