如例表:
(ASN列为自动增量编号,ID为标识,NUM是用于需要计算的数)
tablename:T1
ASN   ID   NUM   
--------------
1     12   100    
2     13   200
3     14   300 
4     12   110
5     14   320
6     13   230
7     14   365
8     13   250
9     12   160想达到以下目的:
按相同ID的最后两行(按ASN降序排列)用来计算,
把相同ID的ASN编号最大的一行的NUM列的数值 减去 ASN编号第二大的行的NUM列数值
后生成表单:
ID   NUM   
--------
12   50   (此条相当于ASN=9 的[NUM] 减去ASN=4 的[NUM],160-110=50)
13   20   (此条相当于ASN=8 的[NUM] 减去ASN=6 的[NUM],250-230=20)
14   45   (此条相当于ASN=7 的[NUM] 减去ASN=5 的[NUM],365-320=45)
这句查询该如何写?如同时处理这样的所有ID产生表单而不能实现的话,能否做到仅对一个ID而言来做,
也就是仅查询ID=x后的ASN最大两行的NUM列相减。
产生表单:
ID   NUM   
--------
13   20   (仅查询ID=13。相当于ASN=8 的[NUM] 减去ASN=6 的[NUM],250-230=20)以上这样的查询如何写?(不想用UPDATE,或生成到其他表中再来计算,想一步完成产的查询结果)
请各位赐教!

解决方案 »

  1.   

    SELECT T1.ID, 2*( SELECT  top 1 num
    FROM T1 
    where id ='13'
    order by asn desc)- sum(num)
    FROM( SELECT top 2  *
    FROM T1 
    where id ='13'
    order by asn desc)
    GROUP BY T1.ID
      

  2.   

    select a.id,a.num-isnull(b.num,0) as num 
    from  t1 a
    left join  t1 b
    on a.id=b.id   and 
       a.asn>b.asn and
       (select count(*) from t1 where id=b.id and asn>=b.asn)=2
    where not exists (
    select 1  from t1 where id=a.id and asn>=a.asn)
    order by a.id