2016-11-28 35 views
0

我试图从统计表中获得每位客户最后一天的最后一条记录。 我想选择最后一天销售量最大的顾客。从所有客户中选择Rails中的最后一条记录

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

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

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 

型号: 客户的has_many:统计数据 - 统计belongs_to的:客户

+0

可否请您添加模型声明? 为了使你的第一个查询工作,你应该加入。所以第二。 – marmeladze

+0

你的'Customer'和'Statistic'模型之间有'has_many'' belongs_to'关系吗? – sa77

+0

对。客户has_many:统计和统计belongs_to:客户 –

回答

1
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)") 

这会给你从谁卖的大部分项目的最后一天,到目前为止客户的最大销售的项目,

让我来引导你通过这个,

基本上,首先你需要每个客户的最新统计数据。那么您需要这些统计信息中的sold_items的maximum

所以嵌套查询(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是另一个链接,它可以查找每个组的最新记录。

+0

哇,这太棒了!谢谢! –

相关问题