Ruby on rails Rails 3-如何加入表并筛选最后X天?

Ruby on rails Rails 3-如何加入表并筛选最后X天?,ruby-on-rails,activerecord,join,has-many,Ruby On Rails,Activerecord,Join,Has Many,我的客户有很多交易。我想选择在过去30天内没有任何交易的所有客户(交易有一个交易日),并显示客户的姓名和最后交易日 如何在rails中执行此查询?在您的事务模型中: scope :trans_order => (:order => "transaction date ASC") 在控制器中 @inactive_clients = Client(:include => :transactions).where ("max(transaction_date) < ? AN

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


如何在rails中执行此查询?

在您的事务模型中:

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)

我会使用not exists子句,如

@clients = Client.where("not exists (select 'x' from 
    transactions where transactions.client_id = clients.id 
    and transaction_date > ?)", 
  30.days.ago)
@client\u transactions=Transaction.includes(:client).where('Transaction\u date<?',30.days.ago.)。组(:client\u id)
@客户|交易。每个do |客户|交易|
放置“客户端为#{client_transaction.client.name}”
结束

我不太明白。。。我正在寻找过去30天内没有任何交易的客户。交易记录将始终有一个交易记录日期(不能为空)。在您要报告的30天期限之前是否有交易记录?我想q没有说清楚,也许吧。如果他们从未进行过交易,则可以不返回。如果他们的最后一笔交易是29天前,我不想退货。如果最后一笔交易发生在31天前,我希望它出现在列表中。基本上是想显示一个客户名单,这些客户以前已经付款,但一个月以上没有付款。
@clients = Client.where("not exists (select 'x' from 
    transactions where transactions.client_id = clients.id 
    and transaction_date > ?)", 
  30.days.ago)
@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