求一条满足下列条件的sql语句,急,谢谢各位大神。

数据表里有N行数据,D1列为时间,每分钟一行,现想循环取某几列一个时间点往前推1个小时的平均值,每分钟要1个平均值,滚动的,然后输出到EXCEL中,如:D2列:10:30分的数据等于从10:30到9:30的60行的D2的平均值(注意,有时从9:30到10:30并不是一定60行,有时会丢数据,丢几行也有可能),实在弄不明白,初学者,请给详细语句。谢谢!
大侠,现在需要字符连接串,这是别人给的一句,
sqlstring = "select convert(varchar(50),dt,23),datepart(hh,dt),(select avg(d5) from SHEET_DAILY where dt<=c1.dt and dt>=c1.dt-0.04166666667),count(*) from SHEET_DAILY c1 where dt between '" & yesterday_date2 & "' and '" & yesterday_date1 & "' ORDER BY CONVERT(varchar,dt,23),DATEPART(hh,dt)"

With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstring)
但是报错,说C1.DT未包含在聚合函数中,并且没有GROUP BY子句

create table #table --创建一个临时表存放需要的时间

declare @a datetime --开始时间

declare @b datetime=dateadd(hh,-1,@a) --结束时间
declare @c datetime=@a --读取记录时间

while @c>=@b
begin
insert into #table

select @c,avg(列名),.. from 表 where D1>=DATEADD(hh,-1,@c) and D1<=@c

set @c=dateadd(minute,-1,@c)

end

select * from #table追问

大侠,现在需要一个连接字符串,别人给出了一句,请看补充问题,但是报错。请修改,谢谢谢。

追答

可以去掉count(*),如果需要的话写个查询放在那 (select count(*) from ...)

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答