Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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语句能否转换为单个AR语句?_Sql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

这个复杂的SQL语句能否转换为单个AR语句?

这个复杂的SQL语句能否转换为单个AR语句?,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,因此,我已经找到了如何在bare SQL中查询所需内容的方法,但ActiveRecord实际上没有传递bare SQL的方法。我真的很难把它变成AR友好的方法/范围。感谢您的帮助 SELECT foo.status, count(*) FROM ( SELECT t1.* FROM checkins t1 WHERE t1.time = (SELECT MAX(t2.time) FROM checkins

因此,我已经找到了如何在bare SQL中查询所需内容的方法,但ActiveRecord实际上没有传递bare SQL的方法。我真的很难把它变成AR友好的方法/范围。感谢您的帮助

SELECT foo.status, count(*)
    FROM (
        SELECT t1.*
        FROM checkins t1
        WHERE t1.time = (SELECT MAX(t2.time)
                 FROM checkins t2
                 WHERE t2.host_id = t1.host_id
                 AND time <= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 10 MINUTE
                 )
    )

) as foo
GROUP BY foo.status
编辑:我想澄清数据是什么样子的。这是主机为提供可用性而进行的签入列表。因此,该表有3列:主机id、时间、状态。状态为可用或不可用。我想做的是花一段任意的时间,找到之前最新的签入,并总结两种状态类型,即有多少台计算机可用和有多少台正在使用

我并不反对用正确的AR方法来做这件事,但我正在用图表记录计算机的使用情况,所以我不想把它变成40个查询来获取所有信息


此外,在理想情况下,这将是一个范围或类似的范围,以便我可以将其与其他约束联系起来。类似于主机。where…available\u count或类似的东西。

如果原始SQL对您来说是一个有效的解决方案,您可以尝试:

rows = ActiveRecord::Base.connection.select_all(query)
然后


你的模特在这里看起来像什么?是否存在任何关联,或者它只是一个模型?要与ActiveRecord配合使用,您需要找到一种编写非嵌套查询的方法。我有一个主机模型,它有许多签入。签入属于主机。我还有一些组,其中有许多主机,并且一个主机属于一个组。要清除,签入表是各种主机状态更改的列表。它们的条目包括时间、主机ID和状态。这两种状态分别为可用和不可用。该表包含一个巨大列表中所有主机的条目。我想做的是,在一个完美的世界里,我能把它作为一个范围,这样我就可以把其他东西链接到它上面。例如,如果我将主机放入组中,我就可以执行.hosts.checkins.available_,只需添加过滤即可获得相同的结果。但除非如此,这个解决方案可能很好地解决了我的问题。
rows.each do |row|
  value = row["status"]
  count = row["count"]
end