为了理解方便,我建立了一个数据表Station Date RA001 20090101 11001 20090102 0001 20090103 13001 20090104 0001 20090105 15001 20090106 16-----------------------------查询第20090106这一天的过程降水量,SQL为Select Station, Min(Date) as MinDate, Sum(RA) as SumRA, Count(Date) as DaysFrom (Select A.*, (Select Sum(Iif(RA>0,1,0)) From Test B Where B.Date>=A.Date And B.Date<=20090106 and B.Station=A.Station )AS X0, (Select Count(RA) From Test B Where B.Date>=A.Date And B.Date<=20090106 and B.Station=A.Station )AS X1, (Select Sum(RA) From Test B Where B.Date>=A.Date And B.Date<=20090106 and B.Station=A.Station )AS X2 From Test A Where Date<=20090106 )Where X0+1 >= X1Group By Station---------使用的是ACCESS,对于SQL SERVER, Sum(Iif(RA>0,1,0)) 可以更改为 Sum(Case when ra>0 then
1 else
0 end)Where X0+1 >= X1:容许其中的一条无降水量字段说明: X0:当前记录到20090106 之间的存在降水的天数 X1:当前记录到20090106 之间的天数,你也可以用函数来实现这两个日期之间的天数为了加快速度,你也可以只需要考虑最近30天内的情况,一般来说连续降水不好超过30天的,所以可以将Where Date<=20090106更改为 Where Date<=20090106 and Date>=20081206----如果还看不明白,请先查看其中的子查询的查询结果,这样便于你的理解。