通过活动记录栏记录每组的前n个记录

时间:2017-08-23 14:59:59

标签: ruby-on-rails activerecord

我有一个名为result的表,它有source_id

id source_id text order
1  1         aaa  1
2  1         bbb  2
3  1         ccc  3
4  2         aaa  1
5  2         bbb  2
5  2         ccc  3

问题是如何通过source_id按每个组的顺序获得前2个记录顺序?结果应该是这样的

source_id  text  order
1          aaa   1
1          bbb   2
2          aaa   1
2          bbb   2

我尝试了这些查询,但没有这些查询正在运行

.group("source_id").order('order DESC').limit(30)

.group_by(&:source_id).map! { |source_id, latest_results_of_source| latest_results_of_source.limit(30)}

.group_by(&:source_id).map { |source_id, latest_results_of_source| latest_results_of_source.limit(30)}

.group_by(&:source_id).map { |source_id, latest_results_of_source| latest_results_of_source}

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

Result.find_by_sql("SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY source_id ORDER BY order DESC) AS r, results.* FROM results) x WHERE x.r <= 2 ORDER BY order")

答案 1 :(得分:1)

您可以尝试:

 Result.where(order:[1,2]).order(:source_id, :order)