每组最大 n rails ActiveRecord SQL

Greatest-n-per-group rails ActiveRecord SQL

我有一个 ActiveRecord 模型 Post,其中包含字段 created_atscore。我想在最近创建的 50 个中按分数排序 Posts。所以基本上 SQL 会是

SELECT * FROM
(SELECT * FROM Posts ORDER BY created_at DESC LIMIT 50) Sorted_Posts
ORDER BY score DESC

不幸的是,我不确定如何在 Rails 中执行此操作。我不喜欢使用原始 SQL 来完成此操作,因为查询中有许多未显示的过滤器和其他内容确实会使原始 SQL 复杂化。我研究过是否可以使用 to_sql 并去掉 SELECT * FROM POSTS 前缀然后将其放入 wherefind_by_sql 函数中,但我觉得这可能是 hacky 并可能导致SQL 注射?

谢谢。

试试这个:

Post.order('created_at DESC').limit(50).order('score DESC')

不确定这是否适用于您的用例,但这是完成您的要求的一种方法

Post.from("(#{Post.order('created_at DESC').limit(50).to_sql}) posts").order('score DESC')

本质上,您是在构建内部查询,然后将其转换为 SQL 文字并使用插值将其放入外部查询的 from 部分。

也许是这样的:

Order.where(id: Order.order(:created_at => :desc).limit(50).ids).order(:score => :desc)