获取一个时刻开始60分钟的,每分钟数据的平均值sql怎么写,mysql的

数据库表中每分钟的数据数量不固定,需要写个sql语句,取一个时刻开始60分钟内的,每分钟数据的平均值sql,求教图片说明

sql

4个回答

参考SELECT / GROUP BY - segments of time (10 seconds, 30 seconds, etc)
函数UNIX_TIMESTAMP(createtime)把时间转换成UNIX时间戳,也就是与1970年1月1日的秒数差,因为你是要求按每分钟,所以DIV 60把秒转换成分钟,通过GROUP BY把数据分组,用AVG函数求出每个分组的平均值。

SELECT (UNIX_TIMESTAMP(createtime) DIV 60)
    , AVG(dustquantity) AS dustquantity
        , AVG(indoortemperature) AS indoortemperature
        , AVG(indoorhumidity) AS indoorhumidity
        , AVG(carbondioxide) AS carbondioxide
        , AVG(voc) AS voc
FROM 表名
GROUP BY UNIX_TIMESTAMP(createtime) DIV 60
save4me
save4me 你这个给定时间,直接在FROM后面加上WHERE就可以了。
4 年多之前 回复
da_guangge
da_guangge 知道啦,谢谢
4 年多之前 回复
da_guangge
da_guangge 哥呀,给定某一时刻2015-10-19 09:28:11到2015-10-19 09:29:11这一分钟的平均值,要怎么写呀
4 年多之前 回复

不知道你在说什么?能具体点吗

da_guangge
da_guangge 就是比如表中2015-10-19 09:28:11到2015-10-19 10:28:11这一个小时内有很多数据,我现在需要取这60分钟的每分钟的平均值,第一个平均值:2015-10-19 09:28:11到2015-10-19 09:29:11这一分钟的平均值,一共60个,就这样
4 年多之前 回复

declare @dt datetime
set @dt = '2015-10-19 09:28:00'; -- 开始时间
select m=convert(varchar(16), createtime, 120), avg(voc) from yourtable
where createtime between @dt and dateadd(minute, 60 ,@dt)
group by convert(varchar(16), createtime, 120)

da_guangge
da_guangge 哥,我sql比较烂,能在细致点吗,不胜感激!!差点哭晕在厕所
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问