Rails Active Record - 调用Distict行

时间:2016-05-14 06:36:27

标签: ruby-on-rails postgresql ruby-on-rails-4

我有以下型号

influencers (id, name, ..)
influencer_authorizations (id, influencer_id, ... )
influencer_metrics (id, influencer_authorization_id, date, count)

关系如下

influencers has_many influencer_authorizations
influencer_authorizations has_many influencer_metrics

我想使用最新的DATE和sum来获取influencer_metrics中所有influencer_authorizations的计数,以显示influencer的总跟随者

正在尝试什么

查找所有授权ID

influencer_authorizations = InfluencerAuthorization.where(influencer_id: influencer.id).pluck(:id)

现在我试图在每个influencer_authorizations的技术上找到所有influencer_authorizations的最新日期行,它应该返回我要计算其总和的一行。

total_followers = InfluencerMetric.where(influencer_authorization_id: influencer_authorizations).order('metrics_date DESC').first

但它现在返回所有行。日期很棘手,因为我每个influencer_authorizations上次提取的日期有时会有所不同。因此,我们需要每个metrics

的最新influencer_authorizations条记录

1 个答案:

答案 0 :(得分:1)

这可能是你想要的吗?

Influencer.
  joins(influencer_authorizations: :influencer_metrics).
  select("SUM(influencer_metrics.count) as followers, COUNT(influencer_metrics.id)").
  where(id: influencer.id).
  group("influencer_authorizations.id").
  order("influencer_metrics.metrics_date DESC").
  limit(1)

我对你描述的查询不太清楚,因为一些措辞似乎与架构关系相反。这可能是一个起点。

如果碰巧无法按预期工作,请尝试删除.limit(1)部分并查看返回的内容。如果你是游戏,我们可以从那里去。