问题没弄清楚,再来求解,关于月报的问题

zoujiaming zoujiaming 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
就是求一个月报,字段如下
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'
...全文
评论 17
收藏 已收藏
分享
返回顶部
zoujiaming
MS-SQL Server 34,876 成员 254,635 内容