问题没弄清楚,再来求解,关于月报的问题
就是求一个月报,字段如下
ID EnvirTemp MaxTemperature MaxTemperatureTime RecorderID nDate
1 1.2 2.2 2008-10-20 13:11 08295 2008-10-20 13:12
1 1.2 2.2 2008-10-21 13:11 08295 2008-10-21 13:12
1 1.3 3.2 2008-10-21 13:11 08295 2008-10-21 13:12
1 1.4 2.2 2008-10-24 13:11 08295 2008-10-24 13:12
1 1.2 7.2 2008-10-27 13:11 08295 2008-10-27 13:12
1 1.4 1.2 2008-10-28 13:11 08295 2008-10-28 13:12
1 1.2 3.2 2008-10-28 13:11 08295 2008-10-28 13:12
下面的存储过程通过输入起始的日期(@st)和结束日期(@ed)和编号(RecorderID='08295'),可以满足求一天的数据了,但问题是一个月有30天,那么我的程序只能求一天的,这样还达不到要求,我想求从一个月开始到一个月结束这段时间的值,请兄弟帮我改一下程序,既得可以到到一个月每一天的值。如果查询不到数据,就只插入nDate的值和RecorderID的值其余为空。
我本想用笨方法while还循环得到这30天的值,但是一循环又无法变成一个表了,我想返回一个表。
注:每一天指的是前一天的20点到今天的20点算做一天,过了今天的20点算下一天。
比如:大于 2008-10-20 20:00 并且 小于 2008-10-21 20:00 这样才算做一天
if object_id('sp_MonthReport_Calculate','u') is not null
drop proc sp_MonthReport_Calculate
go
create proc sp_MonthReport_Calculate
@st DATETIME,
@ed DATETIME,
@RecorderID VARCHAR(5)
as
SELECT Temperature=AVG(EnvirTemp)
,MaxTemperature=MAX(MaxTemperature)
,MaxTemperatureTime=(select min(MaxTemperatureTime) from MeteTable where (nDate between @st And @ed) And RecorderID=@RecorderID and MaxTemperature=max(t.MaxTemperature))
,RecorderID=@RecorderID
,nDate=CONVERT(VARCHAR(10),@ed,120)
FROM MeteTable t
WHERE RecorderID=@RecorderID and nDate between @st AND @ed
go
exec sp_MonthReport_Calculate '2008-10-16 20:00','2008-10-17 20:00','08295'
ID EnvirTemp MaxTemperature MaxTemperatureTime RecorderID nDate
1 1.2 2.2 2008-10-20 13:11 08295 2008-10-20 13:12
1 1.2 2.2 2008-10-21 13:11 08295 2008-10-21 13:12
1 1.3 3.2 2008-10-21 13:11 08295 2008-10-21 13:12
1 1.4 2.2 2008-10-24 13:11 08295 2008-10-24 13:12
1 1.2 7.2 2008-10-27 13:11 08295 2008-10-27 13:12
1 1.4 1.2 2008-10-28 13:11 08295 2008-10-28 13:12
1 1.2 3.2 2008-10-28 13:11 08295 2008-10-28 13:12
下面的存储过程通过输入起始的日期(@st)和结束日期(@ed)和编号(RecorderID='08295'),可以满足求一天的数据了,但问题是一个月有30天,那么我的程序只能求一天的,这样还达不到要求,我想求从一个月开始到一个月结束这段时间的值,请兄弟帮我改一下程序,既得可以到到一个月每一天的值。如果查询不到数据,就只插入nDate的值和RecorderID的值其余为空。
我本想用笨方法while还循环得到这30天的值,但是一循环又无法变成一个表了,我想返回一个表。
注:每一天指的是前一天的20点到今天的20点算做一天,过了今天的20点算下一天。
比如:大于 2008-10-20 20:00 并且 小于 2008-10-21 20:00 这样才算做一天
if object_id('sp_MonthReport_Calculate','u') is not null
drop proc sp_MonthReport_Calculate
go
create proc sp_MonthReport_Calculate
@st DATETIME,
@ed DATETIME,
@RecorderID VARCHAR(5)
as
SELECT Temperature=AVG(EnvirTemp)
,MaxTemperature=MAX(MaxTemperature)
,MaxTemperatureTime=(select min(MaxTemperatureTime) from MeteTable where (nDate between @st And @ed) And RecorderID=@RecorderID and MaxTemperature=max(t.MaxTemperature))
,RecorderID=@RecorderID
,nDate=CONVERT(VARCHAR(10),@ed,120)
FROM MeteTable t
WHERE RecorderID=@RecorderID and nDate between @st AND @ed
go
exec sp_MonthReport_Calculate '2008-10-16 20:00','2008-10-17 20:00','08295'
...全文


