数据库中的数据是按照每天累加统计的,就是说每年从一月一号开始统计,一月二号的数据等于一月一号加上一月二号当天的数据这样一直累加到年末十二月三十一号。
例子如下:   地域      时间       数据A    数据B
  省份1   2010-01-01      3        5
  省份1   2010-01-02      5        9
  省份1   2010-01-03      7        12
  省份2   2010-02-28      10       8
  省份2   2010-03-01      20       20
  省份2   2010-03-02      25       30
查询结果为:
   地域      时间       数据A    数据B
  省份1   2010-01-01      3        5
  省份1   2010-01-02      2        4
  省份1   2010-01-03      2        3
  省份2   2010-02-28      10       8
  省份2   2010-03-01      10       12
  省份2   2010-03-02      5        10
再次麻烦个位大虾帮忙想一下这个SQL问怎么写,先谢谢了!

解决方案 »

  1.   

    with tab as(
    select '省份1' code ,to_date('2010-01-01','yyyy-mm-dd') time, 3 data1, 5 data2 from dual 
    union all 
    select '省份1',to_date('2010-01-02','yyyy-mm-dd'),5, 9 from dual 
    union all 
    select '省份1',to_date('2010-01-03','yyyy-mm-dd'),7, 12 from dual
    union all 
    select '省份2',to_date('2010-02-28','yyyy-mm-dd'),10, 8 from dual
    union all 
    select '省份2',to_date('2010-03-01','yyyy-mm-dd'),20, 20 from dual
    union all 
    select '省份2',to_date('2010-03-02','yyyy-mm-dd'),25, 30 from dual
    )
    select code,
           time,
           data1-lag(data1,1,0)over(partition by code order by time) data1,
           data2-lag(data2,1,0)over(partition by code order by time) data2
    from tab CODE  TIME              DATA1 DATA2
    -----------------------------------------
    省份1 2010.01.01 00:00:00  3  5
    省份1 2010.01.02 00:00:00  2  4
    省份1 2010.01.03 00:00:00  2  3
    省份2 2010.02.28 00:00:00 10  8
    省份2 2010.03.01 00:00:00 10 12
    省份2 2010.03.02 00:00:00  5 10
      

  2.   

    CREATE TABLE T_1
    (
    地域  VARCHAR2(90),
    时间  DATE,
    数据A number,
    数据B number);
    --插入测试数据略--生成加过SQL
    SELECT A.地域,
       A.时间,
       数据A - LAG(数据A, 1, 0) OVER(PARTITION BY 地域 ORDER BY 时间),
       数据B - LAG(数据b, 1, 0) OVER(PARTITION BY 地域 ORDER BY 时间)
    FROM   T_1 A;
      

  3.   

    基本同意这种方案,但提醒一下,需要考虑跨年的情况。
    建议在 lag 函数前,加入 case when 的判断吧。
      比如 case when  to_char(datetime,'MMDD') = '0101' (新年第一天) then data1
                       else (借用下面的lag函数即可) end data1