我有以下型号
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
条记录
答案 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)部分并查看返回的内容。如果你是游戏,我们可以从那里去。