从所有客户中选择 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
【问题讨论】:
能否请您添加模型声明?为了使您的第一个查询起作用,您应该进行联接。所以第二个。 您的Customer
和Statistic
模型之间是否存在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 中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章
从 BindingList 中删除最后一条记录选择最后一行导致 DataGridView 滚动