嵌套连接查询,只有第三个表的最后一行

时间:2017-12-20 16:23:32

标签: ruby-on-rails postgresql activerecord

所以我已经在这个问题上挣扎了几个小时,而且我真的不知道如何得到我需要的结果。也许有些人有线索?

到目前为止我的查询:

items = Item.joins(projects: :connexions)
            .where.not(connexions: []).where("connexions.updated_at > ?", 3.years.ago)

它工作正常。但我需要的是物品,只有最后连接" updated_at"项目大于3年前。

基本上,我想做一个items.projects.connexions.last.where等。

你有一些提示吗?

谢谢:)

编辑:更具体地了解我的"连接"规范,我需要检索3年以来没有连接的项目的记录。这就是我使用updated_at字段的原因!

编辑2 :我设法使用jvillian答案。

items = Item.joins(:projects).where(projects: {id: Project.joins(:connexions).where(
                                              connexions: { id: Connexion.order(updated_at: :desc).limit(1).where("updated_at < ?", 3.years.ago)}
                                             )}
                                            )

谢谢!

1 个答案:

答案 0 :(得分:0)

可能适合您(未经测试)

Item.where.not(id: 
  Item.joins(:projects).where(
    projects: {id: Project.joins(:connections).where(
      connections: {id: Connection.where("updated_at <= ?", 3.years.ago)}
    )}
  )
)

它很棒的火腿(如果它甚至有效)。