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 回答