例表D1
 
 nyr           P8             P14          P201/1/05         35              32          40
2/1/05         53              21          18
3/1/05         64              12          60
4/1/05         37              31          13
5/1/05         25              52          25
6/1/05         11              30          59
7/1/05         56              42          37
8/1/05         28              16          69
9/1/05         38              45          15
 .
 .
 .下面的SQL怎么写?(1)怎么得到下表D2:用当天的数据减去前一天的(拿P14字段来说)p14    (注解)-11    =(21-32)
-9     =(12-21)
19     =(31-12)
21     =(52-31)
-22    .
12     .
-26    . 
29     .
 .       
 .
 .
(2)怎么在D1表中直接实现下面的结果:即求完差值后再求一次两两间的差值,也就是得到的数据其实是用D2表的当天数据减去前一天的,但其实是在D1表中直接实现,而不通过D2表.得到下表D3表(拿P14字段来说):p14     (注解) 2     =(12-21)-(21-32)
 28    =(31-12)-(12-21)
 2     =(52-31)-(31-12)
-43    .
 34    .
-38    . 
 55    .
 .
 .
 .
(3)怎么在D1表中直接实现D3表的差值。也就是求D3表中两两的差值要在D1表中直接实现,怎么得到下表(拿P14字段来说)p14     (注解) 26     =(31-12)-(12-21)-(12-21)-(21-32)
-26     =(52-31)-(31-12)-(31-12)-(12-21)
-45         '     
 77         .     
-72         .     
 93         .     
 .
 .
 .

解决方案 »

  1.   

    select
        isnull(a.P14,0) - isnull(b.P14,0) 
    from 
        D1 a 
    left join 
        D1 b 
    on 
        datediff(day,b.nyr,a.nyr)=1
      

  2.   

    select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=1select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=2select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=3
      

  3.   

    select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=1select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=2select a.P14-b.P14 from D1 a,D1 b where datediff(day,b.nyr,a.nyr)=4
      

  4.   

    (1)的问题解决了,(2)和(3)不对啊.libin_ftsafe(子陌红尘:当libin告别ftsafe) 帮我再看看好吗?