我的客户有很多交易。我想选择所有在过去30天内没有任何交易的客户(交易有一个transaction_date)并显示客户的名称和最后一个交易日期。
如何在rails中执行此查询?
答案 0 :(得分:2)
在您的交易模型中:
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
答案 1 :(得分:1)
@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
答案 2 :(得分:0)
我会使用像
这样的not exists子句@clients = Client.where("not exists (select 'x' from
transactions where transactions.client_id = clients.id
and transaction_date > ?)",
30.days.ago)