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

Posted

技术标签:

【中文标题】从所有客户中选择 Rails 中的最后一条记录【英文标题】:Select from all customers the last record in Rails 【发布时间】:2017-04-11 21:43:10 【问题描述】:

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

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

我尝试了几个命令,但都收到错误。

 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

pluck 是最好的解决方案吗?还是我应该创建 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 :statistics - 统计数据 belongs_to :customer

【问题讨论】:

能否请您添加模型声明?为了使您的第一个查询起作用,您应该进行联接。所以第二个。 您的CustomerStatistic 模型之间是否存在has_many belongs_to 关系? 对。客户 has_many :statistics 和 Statistic belongs_to :customer 【参考方案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)")

这将为您提供迄今为止在最后一天售出最多商品的客户的最大售出商品,

让我带你看看这个,

基本上,首先您需要每个客户的最后统计信息。那么您需要来自这些统计数据的已售商品的 maximum

因此,嵌套查询 (select customer_id,max(created_at) as created_at from statistics group by customer_id) 正在为每个客户选择最大值 created_at,然后外部查询将实际 statistics 与这些结果连接起来,并仅选择那些符合最后日期条件的结果。然后在最后 pluck("max(statistics.sold_items)") 从这些结果中选择最大的已售商品。

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

【讨论】:

哇,太棒了!谢谢!

以上是关于从所有客户中选择 Rails 中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Eloquent 选择具有值的最后一条记录

从 BindingList 中删除最后一条记录选择最后一行导致 DataGridView 滚动

当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值

如何在 InfluxDB 中选择最后一条记录

选择每组中的最后一条记录

Django按时间序列中的ID过滤和选择每个月的最后一条记录的方法?