我有一个list_events
表,我希望在某个时间之间获得每个用户每个用户的最新事件。这是表格的一个例子。
id user_id list_id event created_at
1 5 1 sub 13:45
2 1 1 sub 14:01
3 1 2 sub 14:02
4 3 1 sub 14:03
5 4 1 sub 14:04
6 1 1 unsub 14:05
14:00到15:00之间列表1的每个用户的最后事件将是......
id user_id list_id event created_at
4 3 1 sub 14:03
5 4 1 sub 14:04
6 1 1 unsub 14:05
在我的Rails 5模型中,我编写了这样的查询:
list.events
.joins("
left outer join list_events b
on list_events.user_id = b.user_id
and list_events.list_id = b.list_id
and list_events.created_at < b.created_at
")
.where("b.user_id is null")
.where(created_at: start..end)
这很好用,但是我想知道是否有办法在没有手工编码连接的情况下编写它。我注意到Rails有一个left_outer_join
方法,但没有办法指定自定义on
。也许有一个belongs_to
?
此外,还有一种方法可以将list_events
设为a
,同时仍然可以利用list.events
关系抽象。