从所有客户中选择Rails中的最后一条记录

时间:2016-11-28 08:14:47

标签: ruby-on-rails select distinct

我试图从统计表中获取每个客户最后一天的最后一条记录。 我想从最后一天选择销售量最多的客户。

统计数据每小时生成一次,因此客户有多个统计数据,但我只需要最后一个统计数据。

我尝试了几个命令,我只是收到错误。

 Statistic.where("created_at < ?",1.day.ago).select(:customer_id).distinct.order(created_at: :desc)

Statistic.where("created_at < ?",1.day.ago).select(:customer_id).distinct.last

拔出的最佳解决方案是什么?或者我应该创建2个选择? 我不知道我应该把'sold_items'放在哪里。

这也可能是一个解决方案,但我不确定。

Customer.all.each do |customer|
  stats = customer.statistics.where("created_at < ?",Date.today).last
  count = stats.sold_items if stats.sold_items > count
  best = customer if count = stats.sold_items
end  

模特: customer has_many:statistics - Statistic belongs_to:customer

1 个答案:

答案 0 :(得分:2)

Statistic.joins("inner join (select customer_id,max(created_at) as created_at from statistics group by customer_id) as stats2 on statistics.customer_id = stats2.customer_id and statistics.created_at = stats2.created_at").pluck("max(statistics.sold_items)")

这将为您提供迄今为止最后一天销售大部分商品的客户的最大销售商品

让我带你走过这个,

首先,您首先需要每位客户的最新统计数据。然后你需要这些统计数据中的maximum sold_items。

因此,嵌套查询(select customer_id,max(created_at) as created_at from statistics group by customer_id)正在为每个客户选择最大created_at,然后外部查询将实际statistics与这些结果相关联,并仅选择那些最后一个日期标准。然后在结尾pluck("max(statistics.sold_items)")从这些结果中选择最大sold_items。

HERE是另一个链接,可以找到每个组的最新记录。