0

2 つのオプションを使用してクエリを作成する必要があります。1 つ目は DISTINCT ON を選択し、2 つ目は並べ替え (および他のフィールドによる並べ替え) です。ところで、うまくいかない

あるSQLフォーラムで解決策を見つけました

WITH d AS (
SELECT DISTINCT ON ({Dlist}) {slist}
FROM {flist}
....
)
SELECT * FROM d ORDER BY {order fields}

では、ActiveRecord メソッドを介してこれを作成し、ActiveRecord::Relation を取得する方法

私の完全なクエリは次のようになります。

WITH d AS (
SELECT DISTINCT ON(item_info_id, volume) items.item_info_id, items.volume, items.* 
FROM "items" INNER JOIN "item_info" ON "item_info"."id" = "items"."item_info_id" WHERE "items"."type" IN ('Product') 
AND "items"."published" = 't' 
AND ("items"."item_info_id" IS NOT NULL) 
AND ("items"."price" BETWEEN 2 AND 823489)\
)
SELECT * FROM d ORDER_BY 'price'
4

1 に答える 1

0

以下はあなたのために働くか、いくつかのヒントを与えるかもしれません

class Item < ActiveRecord::Base
  def self.what_you_want_to_achieve
    item_ids = where("item_info_id IS NOT NULL")
              .select(" DISTINCT on(item_info_id, volume) items.item_info_id, items.volume, items.id ")
              .map(&:id)

    where(:id => item_ids).published.products.price_between(2,823489).order(:price)
  end

scopeたとえば、定義方法を知っていると思いますpublished

于 2013-11-06T10:28:32.910 に答える