各位大侠,一条SQL语句的问题!帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/14 11:32:52
有这样一张表:t_zbxx
其中字段有:
id 本期累计 保存时间
1 20 2008-1-1
2 60 2008-4-1
3 100 2008-7-1

求本期数据是多少!

写出一条SQL语句,计算出本期的数据。(本期是本次录入的本期累计数据减去上期录入的本期累计数据,比如说2008-7-1的本期

累计减去2008-4-1的本期累计,既100-60得出40)
谢谢各位SQL高手!
数据库是SQLServer2000
如果加一个字段
id 本期累计 保存时间 类型
1 20 2008-1-1 1
2 60 2008-4-1 1
3 100 2008-7-1 0
4 150 2008-10-1 0
要求类型是1的进行本期累计相减,类型是0的进行本期累计相减,怎么做?

--我给的这个答案是在ID可能不连续的情况下,让相邻的两个ID上的值大号减小号。 caidchelp写的语句在ID是连续的,并且ID递增为一的情况下也是正确的。
select A.*,本期累计=A.本期累计-B.本期累计
from t_zbxx A,T_ZBXX B
WHERE B.ID=
ISNULL((SELECT MAX(D.ID) FROM t_zbxx C WHERE C.ID<A.ID),0)--这个子查询是提出比A表中提出的ID小的ID中最大的一个ID号作为B表的ID号(这是相邻记录的提取方法)。

==========
对于LZ后面的补充,我没搞清是什么意思。有两种理解,一种是将类型相同的记录提出来后,将相邻记录大号减小号。
第二种理解就是类型为1的记录减类型为0的记录。
时间关系统,第二种情况就先不说了,如果是第一种情况,这样就行了:
select A.*,本期累计=A.本期累计-B.本期累计
from t_zbxx A,T_ZBXX B
WHERE B.ID=
ISNULL((SELECT MAX(D.ID) FROM t_zbxx C WHERE C.ID<A.ID and C.TYPE=A.TYPE),0)
--查询原理:1.提取一条A为别名的表中的一条记录(无条件),2.提取一条件B别名的表中的一条件记录,提取条件比A中提出的记录的ID小的、与A中提出的记录的类型相同的所有记录中最大的一条记录(这么绕口,其实就是同TYPE,相邻的记录),3将提出的两条件记录的累积数相减(A的记录-B的记录),作为结果。4继续从A中提取下一条记录,然后再从第2步开始到此,周而复始,直到A中的记录提取完成。所有记录的查询结果就出来了。

加上一个ISNULL()函数判断是为了当A为最小值ID时,相邻记录没有更小的ID时,就不减了(减0)

--首先建一张t_zbxx_sum表,字段为本期累计和保存时间,用于存放结果
declare @lowid int
declare @highid int
declare @Maxi