gpt4 book ai didi

mysql - Rails 计算 has_many 关系并按子模型中的另一个字段分组

转载 作者:行者123 更新时间:2023-11-30 22:32:21 25 4
gpt4 key购买 nike

考虑这个设置

class Device
has_many :job_transactions
end

class JobTransaction
belongs_to :device
# relevant attributes
# sequential_id ( each transaction gets a sequential if using Sequenced Gem)
# station - work station ( let say a total of 10)
# station is an enum


end

每个作业都有多个事务,每个事务完成后,从一个站点移动到另一个站点(它们可以多次移动到不同甚至相同的事务)

我想用最高的顺序 id 计算出此时每个站有多少工作(单元)。

所以结果应该是

{
"Station 1" => 500,
"Station 2" => 123,
etc..
}

我的问题是确保我只计算每台设备的最新交易,而不是第 1 台或其他设备。因为我需要弄清楚目前每个站点有多少设备。

更新:

本质上我想优化这段肮脏的代码:

 has_one :latest_transaction, -> { order sequential_id: :desc }, 
class_name: 'JobTransaction',
foreign_key: 'job_id'


h = Device.joins(:job_transactions).
map{|l| l.latest_transaction.station}.
reduce(Hash.new(0)) { |a, b| a[b] += 1; a };

更新 2

这是一个更快的解决方案,但我仍在寻找 SQL 解决方案

JobTransaction.select('job_id, station, sequential_id').
group_by(&:job_id).
reduce(Hash.new(0)) { |a, b| a[b.last.last.station] += 1; a }

最佳答案

你能不能:

#app/models/device.rb
class Device < ActiveRecord::Base
has_many :job_transactions
scope :count_transactions, -> { joins(:job_transacations).group(:job_id).count }
end

我没有得到这个要求:

I only count latest transaction for each device

也许如果你澄清一下,我们就能解决问题?

关于mysql - Rails 计算 has_many 关系并按子模型中的另一个字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com