请问
如果一个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日期的起始时间是不确定的,但是阶段的天数是一样的。

解决方案 »

  1.   

    找出i行和j行记录的关系。进行自身连接。形如:
    table_name A join table_name b on a.date_1=b.data_1+30(假设是30天的关系,反正找出关系的条件就行了)
      

  2.   

    select 井号,sum(decode(trunc(日期),date'2008-1-1',日期)) 阶段A日期,
      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
      

  3.   

    wildwave理解错了我的意思。select
    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分钟。
    可以优化一下么?
      

  4.   

    select 
    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'
    这样呢?