如何从表中选择每个用户的最后一条记录?

时间:2018-04-10 21:57:25

标签: ruby-on-rails ruby

我有财务交易表,每个交易都包含一个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)的某些东西(尽管那不起作用)。

1 个答案:

答案 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}]
#

尚未对较大的数据集进行测试,但我怀疑它会起作用。