求一条sql语句,关键是要实现一个“与前期对比”的查询。结果大致如下:井号  生产时间  产量  上月生产时间  生产时间变化  上月产量  产量变化说明:
1、应该能只用 1 条语句实现,但我不大会。
2、井号偶尔有变动,这个月的井号可能是新井,上月没有。而上月有的井号,这个月可能没有。不过这种变动很少。
3、除井号为字符型,其他都是数值型。

解决方案 »

  1.   


    楼主可以试试 lag,lead 分析函数
    lag(expression,<offset>,<default>)  函数可以访问组内当前行之前的行,
    lead(expression,<offset>,<default>) 函数则正相反,可以反问组内当前行之后的行.
    其中,offset是正整数,默认为1.因组内第一个条记录没有之前的行,最后一行没有之后的行,它表示要取列第N行之前或者之后的值,default就是用于处理这样的信息,默认为空.它用于当之前或者之后第N行不存在时的值。
    注意:这2个函数必须指定 order By 字句./* Formatted on 2009/11/08 21:09 (Formatter Plus v4.8.8) */SELECT ename, deptno, sal, LAG (sal) OVER (ORDER BY sal) LAG,       LEAD (sal) OVER (ORDER BY sal) LEAD  FROM scott.emp;
    /* Formatted on 2009/11/08 21:11 (Formatter Plus v4.8.8) */SELECT ename, deptno, sal, LAG (sal, 2, 0) OVER (ORDER BY sal) LAG,       LEAD (sal, 2, sal) OVER (ORDER BY sal) LEAD  FROM scott.emp;
    Oracle 分析函数

    http://blog.csdn.net/tianlesoftware/archive/2009/11/10/4795632.aspx
      

  2.   

    呵呵.这个啊...阶段对比还是月度对比?不知是哪个油田滴.嘿嘿...有空交流哈~~我前面有一个简单的.你参考参考~这个是校周报左右的吧..我没用程序就是了..你看看~
    日期在C#中生成的..呵呵..参  //稀油井
    select a.jh,b.jh,round(hehe_a-hehe_b,1) as 液量增减,round(haha_a-haha_b,1) as 油量增减 from 
    (
    select a.jh,sum(a.RCYL1*(a.SCSJ/24)/6) as hehe_a,sum(a.RCYL2*(a.SCSJ/24)/6) as haha_a from 库 a where (a.RQ>='6-11月-09' and a.RQ<='11-11月-09' and a.DWFXMC='SOMEONE') group by a.jh
    ) a,
    (
    select b.jh,sum(b.RCYL1*(b.SCSJ/24)/7) as hehe_b,sum(b.RCYL2*(b.SCSJ/24)/7) as haha_b from 库 b where (b.RQ>='30-10月-09' and b.RQ<='5-11月-09' and b.DWFXMC='SOMEONE') group by b.jh
    ) b where a.jh=b.jh order by 液量增减