Rails 3 - 如何加入桌面并过滤最近X天?

时间:2012-01-28 02:32:30

标签: ruby-on-rails activerecord join has-many

我的客户有很多交易。我想选择所有在过去30天内没有任何交易的客户(交易有一个transaction_date)并显示客户的名称和最后一个交易日期。

如何在rails中执行此查询?

3 个答案:

答案 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)