【问题标题】:Select from all customers the last record in Rails从所有客户中选择 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

标签: ruby-on-rails select distinct


【解决方案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 是另一个链接,可以找到每个组的最新记录。

【讨论】:

  • 哇,太棒了!谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2019-08-31
相关资源
最近更新 更多