2015-06-19 52 views
0

我有以下表结构(简体)DISTINCT与Ruby on Rails和阿雷尔

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 

我想获得最高的版本号的所有记录,通过蛞蝓和其状态发布分组。这样做的SQL是这样的:

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,但我似乎没有弄清楚正确的部分。

回答

0

AR查询已经相当不错,很简单。我不认为你可以得到任何不同的东西,我不认为它有什么问题。

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