选择按日期排序的唯一记录

时间:2013-04-19 08:32:38

标签: postgresql ruby-on-rails-3.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

1 个答案:

答案 0 :(得分:1)

正如Guedes所写,你可以使用DISTINCT ON:

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