请问
如果一个oracle数据库中一个表的是这样的3列
井号 日期 日产油
DXAA 2008-1-1 5
DXAA 2008-1-2 5
DXAA 2008-1-3 5
....(好多条记录)...
DXAA 2008-2-1 4
DXAA 2008-2-2 4
DXAA 2008-2-3 4
....SQL语句可以调出类似这样的表么?序号 井号 阶段A日期 阶段A日油 阶段B日期 阶段B日油
1 DXAA 2008-1-1 5 2008-2-5 4
2 DXAA 2008-1-2 5 2008-2-6 4
3 DXAA 2008-1-3 5 2008-2-7 4 序号列可以没有。阶段A日期和阶段B日期的起始时间是不确定的,但是阶段的天数是一样的。
如果一个oracle数据库中一个表的是这样的3列
井号 日期 日产油
DXAA 2008-1-1 5
DXAA 2008-1-2 5
DXAA 2008-1-3 5
....(好多条记录)...
DXAA 2008-2-1 4
DXAA 2008-2-2 4
DXAA 2008-2-3 4
....SQL语句可以调出类似这样的表么?序号 井号 阶段A日期 阶段A日油 阶段B日期 阶段B日油
1 DXAA 2008-1-1 5 2008-2-5 4
2 DXAA 2008-1-2 5 2008-2-6 4
3 DXAA 2008-1-3 5 2008-2-7 4 序号列可以没有。阶段A日期和阶段B日期的起始时间是不确定的,但是阶段的天数是一样的。
table_name A join table_name b on a.date_1=b.data_1+30(假设是30天的关系,反正找出关系的条件就行了)
sum(decode(trunc(日期),date'2008-1-1',日产油)) 阶段A日油,
sum(decode(trunc(日期),date'2008-2-1',日期)) 阶段B日期,
sum(decode(trunc(日期),date'2008-2-1',日产油)) 阶段B日油 from(
select tab1.*,row_number()over(partition by 井号,trunc(日期,'MM') order by 日期)rn from tab1)
group by 井号,rn
order by 1,2
a.井号,a.日期,a.日产油,b.日期,b.日产油
from dba01 a join dba01 b on a.日期=b.日期+30
where
to_char(a.日期,'yyyymmdd')>'20090501'
and
to_char(a.日期,'yyyymmdd')<'20090515'
and a.井号='DXAA'按sbaz的思路写了上述语句,可是如果当dba01表中的数据很多时,查得好慢啊,得有将近1分钟。
可以优化一下么?
a.井号,a.日期,a.日产油,b.日期,b.日产油
from dba01 a
, dba01 b
where a.井号 = b.井号
and a.日期 = b.日期+30
and a.日期 between to_date('20090502','yyyymmdd') and to_date('20090514','yyyymmdd')
and a.井号 = 'DXAA'
这样呢?