Ruby on rails 在Rails中,一段时间内每小时仅返回一条记录

Ruby on rails 在Rails中,一段时间内每小时仅返回一条记录,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我已经编写了一个Rails 4应用程序,它接受并绘制传感器数据。有时每小时有10点(但这个数字不是固定的)。我正在绘制数据,并对点进行简单的查询。全部以获取所有数据点 为了减少查询大小,我希望每小时只返回一条记录。返回哪个记录并不重要。使用创建的_at字段每小时进行第一次记录就可以了 如何构造查询来实现这一点?您可以得到第一个查询,但平均值可能更好。你所需要做的就是按小时分组。我不是百分之百地了解sqlite语法,而是从这个意义上讲: connection.execute("SELECT AVG

我已经编写了一个Rails 4应用程序,它接受并绘制传感器数据。有时每小时有10点(但这个数字不是固定的)。我正在绘制数据,并对点进行简单的查询。全部以获取所有数据点

为了减少查询大小,我希望每小时只返回一条记录。返回哪个记录并不重要。使用创建的_at字段每小时进行第一次记录就可以了


如何构造查询来实现这一点?

您可以得到第一个查询,但平均值可能更好。你所需要做的就是按小时分组。我不是百分之百地了解sqlite语法,而是从这个意义上讲:

connection.execute("SELECT AVG(READING_VALUE) FROM POINTS GROUP BY STRFTIME('%Y%m%d%H0', CREATED_AT)")
受此启发,这里有一个备选方案,可检索该小时内的最新记录(如果您不想平均):

这将导致以下查询:

SELECT `points`.* 
FROM (
      SELECT max(unix_timestamp(created_at)) as max_timestamp 
      FROM `points` 
      GROUP BY HOUR(created_at)
     ) subquery 
INNER JOIN points ON subquery.max_timestamp = unix_timestamp(created_at)

如果您愿意,也可以使用
MIN
获取小时的第一条记录。

数据存储在哪里?表是什么样子的。它在mySql中生产,在Sqlite中开发。类名是使用标准rails时间戳的Point。因此Point.create_at将返回创建对象的日期时间。这在rails中有效吗?我习惯于在我的查询中使用类似Point.where(…)syntax@bodagetta只要将其放置在模型中,它就可以工作(因为连接属于活动记录库)。我相信“纯”AR版本将是:
Point.average(:reading\u value).group(“strftime(“%Y%m%d%H0”,创建于”)
(未测试)在我看来是合法的,以真正的“Rails”方式。我得到了这个错误#
SELECT `points`.* 
FROM (
      SELECT max(unix_timestamp(created_at)) as max_timestamp 
      FROM `points` 
      GROUP BY HOUR(created_at)
     ) subquery 
INNER JOIN points ON subquery.max_timestamp = unix_timestamp(created_at)