【发布时间】:2012-02-20 23:35:44
【问题描述】:
我的客户有很多交易。我想选择过去 30 天内没有任何交易的所有客户(交易有一个 transaction_date)并显示客户的姓名和最后交易日期。
如何在 Rails 中进行此查询?
【问题讨论】:
标签: ruby-on-rails activerecord join has-many
我的客户有很多交易。我想选择过去 30 天内没有任何交易的所有客户(交易有一个 transaction_date)并显示客户的姓名和最后交易日期。
如何在 Rails 中进行此查询?
【问题讨论】:
标签: ruby-on-rails activerecord join has-many
在您的交易模型中:
scope :trans_order => (:order => "transaction date ASC")
在你的控制器中
@inactive_clients =
Client(:include => :transactions).where
("max(transaction_date) < ? AND transaction_date IS NOT NULL",
Time.now - 30.days)
那么在你看来:
@inactive_clients .each |client|
= client.name
= client.transactions.trans_order.last.transaction_date
end
【讨论】:
@client_transactions = Transaction.includes(:client).where('transaction_date < ?', 30.days.ago).group(:client_id)
@client_transactions.each do |client_transaction|
puts "client is #{client_transaction.client.name}"
end
【讨论】:
我会使用类似的不存在子句
@clients = Client.where("not exists (select 'x' from
transactions where transactions.client_id = clients.id
and transaction_date > ?)",
30.days.ago)
【讨论】: