使用Ruby on Rails和Arel进行DISTINCT ON

时间:2015-06-19 20:58:54

标签: ruby-on-rails ruby arel

我有以下表结构(简化)

id | version | slug |     state
-------------------------------
 1 |       1 |    A | published
 2 |       2 |    A |     draft
 3 |       1 |    B | published
 4 |       1 |    C | published
 4 |       2 |    C | published
 4 |       3 |    C |     draft

我希望获得具有最高版本号的所有记录,按slug分组以及状态发布的位置。 SQL for this如下所示:

SELECT DISTINCT ON(slug) *
FROM guides
WHERE state = 'published'
ORDER BY slug ASC, version DESC;

并打包到Rails中:

Klass.select('DISTINCT ON(slug) *').where(state: :published).order(slug: :asc, version: :desc)

有没有更好的语法?在过去,我使用了一些Arel,但我似乎没有得到明确的部分。

1 个答案:

答案 0 :(得分:0)

AR查询已经非常简单了。我不认为你可以得到任何不同的东西,我认为它没有任何问题。

您唯一可以改变的是使用DISTINCT(slug)而不是DISTINCT ON(slug) *