| id | user_id | created_at (datetime) |
| 1 | 1 | 17 May 2016 10:31:34 |
| 2 | 1 | 17 May 2016 12:41:54 |
| 3 | 2 | 18 May 2016 01:13:57 |
| 4 | 1 | 19 May 2016 07:21:24 |
| 5 | 2 | 20 May 2016 11:23:21 |
| 6 | 1 | 21 May 2016 03:41:29 |
如何获得唯一的和最新的created_at user_id记录的结果,在上述情况下,该结果将是记录ID 5和6?
到目前为止我尝试过的
到目前为止,我正在尝试使用group_by返回这样的哈希值:
Table.all.group_by(&:user_id)
#{1 => [record 1, record 2, record 4, record 6], etc}
并从中选择具有最大日期的记录?谢谢。
更新的解决方案
感谢Gordon的回答,我find_by_sql
习惯在ror中使用原始sql查询。
@table = Table.find_by_sql("Select distinct on (user_id) *
From tables
Order by user_id, created_at desc")
#To include eager loading with find_by_sql, we can add this
ActiveRecord::Associations::Preloader.new.preload(@table, :user)
在Postrgres中,您可以使用DISTINCT ON
:
SELECT DISTINCT ON (user_id) *
FROM tables
ORDER BY user_id, created_at DESC;
我不确定如何用红宝石来表达这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句