Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 取集合中所有小时的平均值_Sql_Ruby On Rails_Ruby - Fatal编程技术网

Sql 取集合中所有小时的平均值

Sql 取集合中所有小时的平均值,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我需要取表中名为bitacoratiempo的字段TS的所有小时和分钟的平均值,该字段是varchar类型,其结构是TS:00:05 我可以通过以下方式从varchar更改为time: ((@prom_tiempo_visita.TS).to_time.strftime('%H:%M:%S')) 我怎样才能得到所有这些小时和分钟的平均值 我试过这个 @prom_tiempo_visita = Bitacoratiempo.prom_tiempo_visita(params).average(:

我需要取表中名为bitacoratiempo的字段TS的所有小时和分钟的平均值,该字段是varchar类型,其结构是TS:00:05 我可以通过以下方式从varchar更改为time:

((@prom_tiempo_visita.TS).to_time.strftime('%H:%M:%S'))
我怎样才能得到所有这些小时和分钟的平均值

我试过这个

@prom_tiempo_visita = Bitacoratiempo.prom_tiempo_visita(params).average(:TS)
但我得到了这个错误:

ActiveRecord::StatementInvalid (TinyTds::Error: Operand data type varchar is invalid for avg operator.: EXEC sp_executesql N'SELECT DISTINCT AVG([bitacoratiempos].[TS]) FROM [bitacoratiempos] left outer join clientes on bitacoratiempos.Codigo=clientes.IdCli WHERE ((bitacoratiempos.RutaId = N''161'' or N''161'' = '''') AND (bitacoratiempos.IdEmpresa = N''208'')) AND (bitacoratiempos.HI >= N''2014-12-01'' AND bitacoratiempos.HI <= N''2016-12-01'')'):
  app/controllers/ventas_controller.rb:20:in `busqueda_general_graficos'

我假设您需要找到收集时间的平均值

设一个数组为

time_array = [2016-12-23 10:16:59 +0530, 2016-12-24 11:16:59 +0530, 2016-12-25 12:16:59 +0530, 2016-12-26 13:16:59 +0530, 2016-12-27 14:16:59 +0530, 2016-12-28 15:16:59 +0530, 2016-12-29 16:16:59 +0530, 2016-12-30 17:16:59 +0530, 2016-12-31 18:16:59 +0530, 2017-01-01 19:16:59 +0530]
你可以通过

DateTime.strptime(((time_array.map{|t| t.to_i}.sum)/time_array.size).to_s,'%s')

好的,您已经发现需要转换您的值才能应用平均运算。不幸的是,平均值只能应用于ActiveRecord实例。这意味着您需要在一个普通代码中计算所有数据。 另一个问题是——平均时间是多少?它不能直接应用于与时间相关的数据类型。首先,您需要将它们转换为整数。其中一个明显的方法是将其转换为秒

因此,一步一步:

它仅适用于小于24小时的值。如果您需要它超过24小时,我相信在彻底调查我的代码的实际功能之后,您最好自己制作

提示:更新第二行和第四行上的强制函数


你试过自己做吗?我们可以看看你的代码来修复它吗?@DmitryTonkonogov更新:非常感谢我的朋友,你的代码为我工作。你的代码很有趣,非常好。
# Get all values to find average 
values = Bitacoratiempo.pluck(:TS)
# Convert it to plain integers
conv_values = values.map {|val| Time.parse(val).seconds_since_midnight }
# Then count the average
avg = conv_values.sum / conv_values.length
# Optionally convert it to the string
nice_string = Time.at(avg).utc.strftime("%H:%M:%S")