省份     时间        数据1     数据2
A省    2010-05-01     10         20
A省    2010-06-01     20         50
B省    2010-05-01     100       300
B省    2010-06-01     200       800
.
.
.
.我要查询5月份各省的数据
得出的结果是
省份      数据1          数据2
A省        10             30
B省        100            500*****A省、B省的数据都是由各省6月1号的数据减去5月1好的数据所得到。
希望各路大虾帮帮小弟。

解决方案 »

  1.   


    select a.省份,b.数据1-a.数据1 as 数据1,b.数据2-a.数据2 as 数据2
    from table a,table b
    where a.省份 = b.省份 and a.时间 = '2010-05-01' and b.时间 = '2010-05-01'
    注意一下你DB“时间”这一列的数据类型
      

  2.   

    select 省份 ,a.数据1-b.数据1,a.数据2-b.数据2 
    from table a,table b 
    where a.省份=b.省份 and a.时间=add_months(b.时间,1)
      

  3.   


    WITH tmp AS
    (
    SELECT 'A省' sf, DATE '2010-05-01' AS rq, 10 sj1, 20 sj2 FROM DUAL UNION ALL
    SELECT 'A省' sf, DATE '2010-06-01' AS rq, 20 sj1, 50 sj2 FROM DUAL UNION ALL
    SELECT 'B省' sf, DATE '2010-05-01' AS rq, 100 sj1, 300 sj2 FROM DUAL UNION ALL
    SELECT 'B省' sf, DATE '2010-06-01' AS rq, 200 sj1, 800 sj2 FROM DUAL
    )
    SELECT sf,x1,x2
    FROM (
    SELECT sf, rq, sj1, sj2
    , sj1 - LAG(sj1, 1) OVER (PARTITION BY sf ORDER BY rq) x1
    , sj2 - LAG(sj2, 1) OVER (PARTITION BY sf ORDER BY rq) x2
    FROM tmp
    )
    WHERE x1 IS NOT NULL AND x2 IS NOT NULL;
    SF             X1         X2
    ------ ---------- ----------
    A省             10         30
    B省            100        500
      

  4.   


    select a.provice,a.date,b.data1-a.data1 data1,b.data2-a.data2 data2
      from table a,table b 
     where a.date=to_date('201005','yyyymm') and b.date=add_months(a.date,1)
      

  5.   

    SQL> edi
    已写入 file afiedt.buf  1  with tb AS
      2  (
      3  SELECT 'A' sf, DATE '2010-05-01' AS dt, 10 sj1, 20 sj2 FROM DUAL UNION ALL
      4  SELECT 'A' sf, DATE '2010-06-01' AS dt, 20 sj1, 50 sj2 FROM DUAL UNION ALL
      5  SELECT 'B' sf, DATE '2010-05-01' AS dt, 100 sj1, 300 sj2 FROM DUAL UNION ALL
      6  SELECT 'B' sf, DATE '2010-06-01' AS dt, 200 sj1, 800 sj2 FROM DUAL
      7  )
      8  select a.sf,a.sj1-b.sj1,a.sj2-b.sj2
      9  from tb a,tb b
     10  where a.sf=b.sf and to_char(a.dt,'mm')=to_char(add_months(b.dt,1),'mm')
     11* and to_char(b.dt,'mm')='05'
    SQL> /S A.SJ1-B.SJ1 A.SJ2-B.SJ2
    - ----------- -----------
    A          10          30
    B         100         500