首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby ActiveRecord组和平均“语法错误在或接近”AS“

Ruby ActiveRecord组和平均“语法错误在或接近”AS“
EN

Stack Overflow用户
提问于 2017-03-16 07:05:28
回答 1查看 292关注 0票数 0
代码语言:javascript
复制
params = {device_id: "u100", device_point: "1", point_no: "1", max_date: "2016-12-01 12:00", min_date: "2016-12-01 11:40"}

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

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

我可以分分钟分组好;

代码语言:javascript
复制
.group("date_trunc('minute', device_time)").average('point_data_val')

e.g

代码语言:javascript
复制
device_data = DeviceDatum.select('device_time, point_data_val').filter(params.slice(:device_id, :device_point, :point_no, :iot_version, :iot_time, :device_time, :point_data_type, :point_data_val, :point_bat_val,:min_val, :max_val, :min_date, :max_date)).limit(1008).group("date_trunc('minute', device_time)").average('point_data_val')
   (240.3ms)  SELECT  AVG("device_data"."point_data_val") AS average_point_data_val, date_trunc('minute', device_time) AS date_trunc_minute_device_time FROM "device_data" WHERE "device_data"."device_id" = $1 AND "device_data"."device_point" = $2 AND "device_data"."point_no" = $3 AND (device_time >= '2016-12-01 11:40') AND (device_time <= '2016-12-01 12:00') GROUP BY date_trunc('minute', device_time) LIMIT 1008  [["device_id", "u100"], ["device_point", 1], ["point_no", 1]]
=> {2016-12-01 11:41:00 +0900=>#<BigDecimal:7f91599cfbc0,'-0.4816E1',18(27)>, 2016-12-01 11:51:00 +0900=>#<BigDecimal:7f91599cf8f0,'-0.4868E1',18(27)>}

我发现this method可以这样做,但是当我尝试使用组方法时

代码语言:javascript
复制
DeviceDatum.select('device_time, point_data_val')
.filter(params.slice(:device_id, :device_point, :point_no, :iot_version, :iot_time, :device_time, 
:point_data_type, :point_data_val, :point_bat_val,:min_val, :max_val, :min_date, 
:max_date)).limit(1008)
.group("date_trunc('hour', device_time) AS hour_stump,
(extract(minute FROM device_time)::int / 10) 
AS min10_slot,count(*)").average('point_data_val')

我得到了这个错误。

代码语言:javascript
复制
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "AS"
LINE 1: ... 12:00') GROUP BY date_trunc('hour', device_time) AS hour_st... : SELECT  AVG("device_data"."point_data_val") AS average_point_data_val, date_trunc('hour', device_time) AS hour_stump,(extract(minute FROM device_time)::int / 10) AS min10_slot,count(*) AS date_trunc_hour_device_time_as_hour_stump_extract_minute_from_d FROM "device_data" WHERE "device_data"."device_id" = $1 AND "device_data"."device_point" = $2 AND "device_data"."point_no" = $3 AND (device_time >= '2016-12-01 11:40') AND (device_time <= '2016-12-01 12:00') GROUP BY date_trunc('hour', device_time) AS hour_stump,(extract(minute FROM device_time)::int / 10) AS min10_slot,count(*) LIMIT 1008
from ...../bundle/ruby/2.1.0/gems/activerecord-4.2.6/lib/active_record/connection_adapters/postgresql_adapter.rb:637:in `prepare'

ActiveRecord似乎也在使用它平均生成的组方法中的选项。

代码语言:javascript
复制
 SELECT
   AVG("device_data"."point_data_val") AS average_point_data_val,
   date_trunc('hour', device_time) AS hour_stump,
   (
      extract(minute 
   FROM
      device_time)::int / 10
   )
   AS min10_slot,
   count(*) AS date_trunc_hour_device_time_as_hour_stump_extract_minute_from_d 
FROM
   "device_data" 
WHERE
   "device_data"."device_id" = $1 
   AND "device_data"."device_point" = $2 
   AND "device_data"."point_no" = $3 
   AND 
   (
      device_time >= '2016-12-01 11:40'
   )
   AND 
   (
      device_time <= '2016-12-01 12:00'
   )
GROUP BY
   date_trunc('hour', device_time) AS hour_stump,
   (
      extract(minute 
   FROM
      device_time)::int / 10
   )
   AS min10_slot,
   count(*) LIMIT 1008

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 13:11:10

我认为您的group子句应该如下所示:

代码语言:javascript
复制
group("hour_stump, min10_slot,
       date_trunc_hour_device_time_as_hour_stump_extract_minute_from_d")

如果您在select子句中使用别名。正如“法伦英雄”和“冰人”所说,group by中的别名是不允许的。

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

代码语言:javascript
复制
group("date_trunc('hour', device_time),
(extract(minute FROM device_time)::int / 10), count(*)")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42827373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档