【问题标题】:DISTINCT ON with Ruby on Rails and ArelDISTINCT ON 与 Ruby on Rails 和 Arel
【发布时间】:2015-06-19 20:58:54
【问题描述】:

我有如下表结构(简化)

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 如下所示:

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,但我似乎没有正确理解不同的部分。

【问题讨论】:

    标签: ruby-on-rails ruby arel


    【解决方案1】:

    AR 查询已经非常漂亮和简单了。我不认为你能得到任何不同的东西,我也看不出有什么问题。

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

    【讨论】:

    • DISTINCT(slug) 的行为类似于 DISTINCT slugDISTINCT ON (slug) * 不同!
    猜你喜欢
    • 2016-05-12
    • 2014-03-22
    • 2012-01-14
    • 2011-01-08
    • 2011-01-21
    • 2011-11-01
    • 2012-04-20
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多