我有以下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
答案 0 :(得分:1)
正如Guedes所写,你可以使用DISTINCT ON:
SELECT DISTINCT ON (schedule_id) *
FROM scheduled_transactions
ORDER BY schedule_id, transaction_on DESC