我有财务交易表,每个交易都包含一个balance
列,该列基本上是所有之前订单项的结果。
我想得到的是每个用户的最新交易(在这种情况下为manager
),因此我可以获得他们当前的balance
。
id manager_id balance
1 1 500
2 2 300
3 1 200
4 1 175
5 2 200
所以在这种情况下,我想要回到manager_id 2的余额为200,manager_id 1的余额为175.
Financial.order('id DESC').uniq(:manager_id)
的某些东西(尽管那不起作用)。
答案 0 :(得分:0)
如果这可能不是最有效的,但假设您没有100多名经理,您可以这样做:
id manager_id balance
1 1 500
2 2 300
3 1 200
4 1 175
5 2 200
mids = Financial.all.pluck(:manager_id).uniq
mids.map{|mid| Financial.where(manager_id: mid).last}
更新,这看起来太简单了,但根据我能够做的数据示例:
Financial.group(:manager_id).pluck(:manager_id, :balance)
# => [[1, 175], [2, 200]]
或者如果您更喜欢返回的哈希数据数组:
Financial.group(:manager_id).pluck(:manager_id, :balance).map{|a| {manager_id: a[0], balance: a[1]}}
# =>[{:manager_id=>1, :balance=>175}, {:manager_id=>2, :balance=>200}]
#
尚未对较大的数据集进行测试,但我怀疑它会起作用。