2

私は次の2つのモデルを持っています:

class Schedule < ActiveRecord::Base    
  attr_accessible :description, :deadline_on, :repeat    
  has_many   :scheduled_transactions    
end

class ScheduledTransaction < ActiveRecord::Base    
  attr_accessible :transaction_on, :description    
  belongs_to :schedule    
end

各スケジュールから最後にスケジュールされたトランザクションを見つけたい。私はできることを知っています:

Schedule.all.each do |schedule|
  schedule.scheduled_transactions.order(:transaction_on).last
end

しかし、私はそれを最適化し、単一のデータベースを選択したいと考えています。

Railsクエリを構築しようとしました:

ScheduledTransaction.select('DISTINCT(schedule_id), scheduled_transactions.*').order('transaction_on DESC')

これは次のように翻訳されました:

SELECT DISTINCT(schedule_id), scheduled_transactions.* FROM "scheduled_transactions" ORDER BY transaction_on DESC

しかし、期待した結果は得られません。同じ schedule_id を持つ行が複数あります。

そして、私の目標は、スケジュールごとに最後にスケジュールされたトランザクションを含むスケジュールされたトランザクションのリストを選択することです。助言がありますか?

(PostgreSQL) 9.1.9

4

1 に答える 1

1

Guedes が書いているように、これには DISTINCT ON を使用できます。

SELECT DISTINCT ON (schedule_id) *
  FROM scheduled_transactions
  ORDER BY schedule_id, transaction_on DESC
于 2013-04-19T11:13:18.183 に答える