Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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
Ruby on rails Ruby ActiveRecord组和average“语法错误位于或接近”AS“”_Ruby On Rails_Postgresql_Activerecord_Group By - Fatal编程技术网

Ruby on rails Ruby ActiveRecord组和average“语法错误位于或接近”AS“”

Ruby on rails Ruby ActiveRecord组和average“语法错误位于或接近”AS“”,ruby-on-rails,postgresql,activerecord,group-by,Ruby On Rails,Postgresql,Activerecord,Group By,我在一个带有PG数据库的ruby/rails环境中工作 我试图添加到我的设备控制器中,使用ActiveRecord从一些虚拟传感器数据中获得10分钟的平均值。 我可以按分钟分组 params = {device_id: "u100", device_point: "1", point_no: "1", max_date: "2016-12-01 12:00", min_date: "2016-12-01 11:40"} e、 g 设备数据=设备数据。选择“设备时间,点数据值”。过滤参数。切片:

我在一个带有PG数据库的ruby/rails环境中工作

我试图添加到我的设备控制器中,使用ActiveRecord从一些虚拟传感器数据中获得10分钟的平均值。 我可以按分钟分组

params = {device_id: "u100", device_point: "1", point_no: "1", max_date: "2016-12-01 12:00", min_date: "2016-12-01 11:40"}
e、 g

设备数据=设备数据。选择“设备时间,点数据值”。过滤参数。切片:设备id,:设备点,:点编号,:物联网版本,:物联网时间,:设备时间,:点数据类型,:点数据值,:点数据值,:点数据值,:最小值,:最大值,:最小日期,:最大日期。限制1008.分组日期,:分钟,:设备时间。平均“点数据值” 240.3ms从设备数据中选择AVGdevice_data.point_data_val作为平均_point_data_val,date_trunc'minute',device_time作为date_trunc_minute_device_time,其中device_data.device_id=$1和device_data.device_point=$2和device_data.point_no=$3,device_time>='2016-12-01 11:40'和device_time{2016-12-01 11:41:00 +0900=>, 2016-12-01 11:51:00 +0900=>} 我找到了做这件事的方法 但是当我试着在组中使用AS方法时

设备数据。选择“设备时间、点数据值” .filterparams.slice:device\u id、:device\u point、:point\u no、:iot\u version、:iot\u time、:device\u time、, :point_data_type、:point_data_val、:point_bat_val、:min_val、:max_val、:min_date、, :max_date.limit1008 .groupdate\u trunc'hour',设备时间为hour\u stump, 从设备提取分钟时间::int/10 作为最小10_插槽,计数*.average'point_data_val' 我得到了这个错误

ActiveRecord::StatementInvalid:PG::SyntaxerError:ERROR:语法错误位于或接近于 第1行:…12:00'按日期“小时”分组,设备“时间”按小时…:选择AVGdevice_data.point_data_val作为平均值“point”data_val,日期“hour”,设备“time”作为小时“stump”,从设备“time”提取分钟::int/10作为最小10个插槽,计数*作为日期“tru hour”设备“time”作为小时“stump”,从设备“data.de”所在的数据提取分钟vice_id=$1和device_data.device_point=$2和device_data.point_no=$3和device_time>='2016-12-01 11:40'和device_time我认为您的group子句应该如下所示:

.group("date_trunc('minute', device_time)").average('point_data_val')
如果您在select子句中使用别名,正如@Fallenhero和@Iceman所说,group by中不允许使用别名

如果在select中自动替换别名,我认为唯一的方法是按原样使用函数

group("hour_stump, min10_slot,
       date_trunc_hour_device_time_as_hour_stump_extract_minute_from_d")

.

如果我没有弄错的话,你可以只在select中使用AS。你在group by子句中尝试做的是什么?你所指的问题在select子句中使用了这个技巧。谢谢,我选择了:groupto_chardate_trunc'hour',device_time',yyyyy-MM-DD HH:'| to| charextractminutes FROM device__time::int/10*10,'fm00',它给出:[2016-12-01 11:00]、[2016-12-01 11:10]、[2016-12-01 11:20]、[2016-12-01 11:30]、[2016-12-01 11:40]、[2016-12-01 11:50]、[2016-12-01 11:50]、[2016-12-01 11:00]、[2016-12-01 11:10]、[2016-12-01 11:50]、[2016-12-12-01 11:50]、[2016-12-12-01 11:50]、[2016-12-12-01 11:20]、[2016-12-12-01 11:00]、[2016-12-12-01 11:00]、[2016-12-12-01 11:00]、[2016-12-12-01 11:00]、[2016-01 11:00[:func],“point\u data\u val”这种格式以一个漂亮的时间戳输出,而“::time stamp without time zone”将时间固定为9小时
group("date_trunc('hour', device_time),
(extract(minute FROM device_time)::int / 10), count(*)")