可以用这样的语句:如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秒的平均值,前秒的时间怎么取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)