如例表:
(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,或生成到其他表中再来计算,想一步完成产的查询结果)
请各位赐教!
(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,或生成到其他表中再来计算,想一步完成产的查询结果)
请各位赐教!
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
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