我有一个名为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}
答案 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)