SQL 两个时间列相减,并求出平均值

SQL 两个时间列相减,并求出平均值,第1张

可以用这样的语句:如2个时间字段是begindate,enddate,单位用小时。

select avg(h) from

(

select datediff(hh,begindate,enddate) h from table

) a

如果要把时间相加的单位改成天,周等,只要该datediff里的hh改成day,week就可以了

首先我们也理解2点

1、日期实际是个数字

2、输入的月份用日期表示,不能用中文去写,B列的日期不知道你是怎么写的

举例说明

我们将B列日期格式再进行一下修改,保持让其显示:年和月

选中B2:B22,打开设置单元格格式对话框,选择自定义

此时将B2:B3选中往下拉,就可以得到连续的年月填充。

有了这个准备工作,剩下的就好办了

L2和M2单元格的日期条件设置和B2:B22一样,既然日期是数字,那么我们就可以以此性质作为大小比较,使用AVERAGEIFS多条件求平均

N2单元格公式:=AVERAGEIFS($D$2:$D$22,$B$2:$B$22,">="&L2,$B$2:$B$22,"<="&M2)

create or replace function HRF_GET_TIME(V_DATE DATE,V_NUM NUMBER,V_TYPE VARCHAR2) return date is

Result DATE;

begin

IF V_TYPE='D' THEN

select V_DATE+numtodsinterval(V_NUM,'DAY') INTO Result from dual;

ELSIF V_TYPE='H' THEN

select V_DATE+numtodsinterval(V_NUM,'HOUR') INTO Result from dual;

ELSIF V_TYPE='M' THEN

select V_DATE+numtodsinterval(V_NUM,'minute') INTO Result from dual;

ELSIF V_TYPE='S' THEN

select V_DATE+numtodsinterval(V_NUM,'SECOND') INTO Result from dual;

END IF;

return(Result);

end HRF_GET_TIME;

参数: @StartDate

@EndDate

select avg(DO),agv(CODR)

from TableName

where Create_Date >= @SatrtDate

and Create_Date <= @EndDate

--这样,直接用平均函数,不行吗?

函数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

以上就是关于SQL 两个时间列相减,并求出平均值全部的内容,包括:SQL 两个时间列相减,并求出平均值、excel表格根据条件A列时间到B列时间,从另一个表格中提取对应时间段的数据并求取算术平均值、oracle timestamp 时间加秒数。数据库里时间为timestamp ,要统计其前5秒的平均值,前秒的时间怎么取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10194515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存