【问题标题】:How to use "DISTINCT ON" in conjunction with Arel / ActiveRecord?如何结合 Arel / ActiveRecord 使用“DISTINCT ON”?
【发布时间】:2015-05-11 11:57:29
【问题描述】:

我有一个Message ActiveRecord 模型,我想选择所有具有不同conversation_partner_id 的消息。我目前将DISTINCT ON 子句指定为字符串,但我想知道是否可以将它作为Arel 表达式提供,以及是否会有好处。我的陈述如下:

Message.select('DISTINCT ON ("messages"."conversation_partner_id") messages.*').from(t)

其中tmessages 表的联合,并指定为有点复杂的Arel 表达式。我将其省略,因为它独立于 SELECT 问题并且工作正常。

以下代码不起作用

Message.select([
  Arel::Nodes::DistinctOn.new(Message.arel_table[:conversation_partner_id]),
  Message.arel_table[Arel.star]
]).from(t)

它会导致格式错误的 SQL,因为它在 DISTINCT ON () 子句之后放置一个逗号:

SELECT DISTINCT ON ("messages"."conversation_partner_id"), "messages".* ...
                                                         ^

【问题讨论】:

    标签: sql ruby-on-rails activerecord arel distinct-on


    【解决方案1】:

    如果你试试这个:

    Message.arel_table
           .project(Arel.star)
           .distinct_on(Message.arel_table[:conversation_partner_id])
           .to_sql
    

    你明白了:

    SELECT DISTINCT ON ( \"messages\".\"conversation_partner_id\" ) * FROM ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多