日期:2014-05-18  浏览次数:20591 次

循环存储过程如何写?
现在有个降雨量表,有站号,日期,雨量等字段,要从数据库里查出当前日期往前5天的这个时间段的雨量显示出来.但是一天中有4个时间的雨量,为:6点,8点,14点,20点.
实现的结果是:查询5天中的雨量,如果某一天有6点的就取6点的雨量值,如果没有就取8点的.不知道这样能不能用存储过程实现,是不是要循环?
请高手帮帮忙!

------解决方案--------------------
如果是日期字段包括了时间:

select 站号,日期,雨量
from 降雨量表 a
where 日期> dateadd(day,-5,convert(char(10),getdate(),111))
and not exists (
select 1 from 降雨量表
where 站号=a.站号
and convert(char(10),日期,111)=convert(char(10),a.日期,111)
and 日期 <a.日期
)

------解决方案--------------------
--建立测试数据

create table tb(pid int,dt datetime,value int)
insert into tb(pid,dt,value) values(1, '2007-05-10 06:00:00 ', 100)
insert into tb(pid,dt,value) values(1, '2007-05-10 08:00:00 ', 0)
insert into tb(pid,dt,value) values(1, '2007-05-10 14:00:00 ', 200)
insert into tb(pid,dt,value) values(1, '2007-05-10 20:00:00 ', 220)
insert into tb(pid,dt,value) values(1, '2007-05-09 14:00:00 ', 300)
insert into tb(pid,dt,value) values(1, '2007-05-09 20:00:00 ', 30)
insert into tb(pid,dt,value) values(1, '2007-05-08 08:00:00 ', 300)
insert into tb(pid,dt,value) values(1, '2007-05-08 14:00:00 ', 30)
insert into tb(pid,dt,value) values(1, '2007-05-08 20:00:00 ', 200)
insert into tb(pid,dt,value) values(1, '2007-05-07 06:00:00 ', 30)
insert into tb(pid,dt,value) values(1, '2007-05-07 08:00:00 ', 300)
insert into tb(pid,dt,value) values(1, '2007-05-07 20:00:00 ', 0)
insert into tb(pid,dt,value) values(1, '2007-05-06 08:00:00 ', 100)
insert into tb(pid,dt,value) values(1, '2007-05-06 14:00:00 ', 20)

select pid,dt,value into #t from (select pid,case when datepart(hour,dt)=6 or datepart(hour,dt)=8 then dt else null end as dt, value
from tb a
where dt> dateadd(day,-4,convert(char(10),getdate(),111)) and pid=1) b where b.dt is not null

select pid as 站号,dt as 日期,value as 雨量 from #t A where (select count(*) from #t where datepart(day,dt)=datepart(day,a.dt) and dt <a.dt ) =0

drop table tb
drop table #t
/*
----------------------------
站号 日期 雨量

1 2007-05-10 06:00:00.000 100
1 2007-05-08 08:00:00.000 300
1 2007-05-07 06:00:00.000 30
----------------------------
*/

不知道是不是要这样的?