我尝试为Rails应用编写一个SQL查询,以便在创建帐户后的24小时内获得跟踪三个用户,跟随三个标签并留下笔记的用户数。
模型结构是:
created_at
列,用户has_many
跟随并发表评论。follower_id
与用户的ID和follower_type
匹配,"User"
或"Tag"
,以及{{} 1}}。created_at
与用户的ID和user_id
匹配。由于我的SQL技能不足,我还没有走得太远。最接近(这仍然很远)我得到的是这样的:
created_at
答案 0 :(得分:2)
这是一个可能的ActiveRecord解决方案。请注意,我仅在IRB中测试了此变体,您的模型可能与我的假设略有不同。另外,我不是SQL专家,所以这可能效率不高。
User
.joins("LEFT OUTER JOIN follows as fu on fu.follower_id = users.id AND fu.created_at < (users.created_at + interval '1 day') AND fu.follower_type = 'User'")
.joins("LEFT OUTER JOIN follows as ft on ft.follower_id = users.id AND ft.created_at < (users.created_at + interval '1 day') AND ft.follower_type = 'Tag'")
.joins("LEFT OUTER JOIN comments as c on c.user_id = users.id AND c.created_at < (users.created_at + interval '1 day')")
.group("users.id")
.having("COUNT(distinct fu.id)>=3 AND COUNT(distinct ft.id)>=3 AND COUNT(distinct c.id)>=1")
您可以查看控制台输出以将其转换为原始SQL。