Postgresql查询以获取在创建帐户后24小时内具有一些属性的用户

时间:2017-10-31 17:46:18

标签: sql ruby-on-rails postgresql datetime

我尝试为Rails应用编写一个SQL查询,以便在创建帐户后的24小时内获得跟踪三个用户,跟随三个标签并留下笔记的用户数。

模型结构是:

  • 用户模型具有ID和created_at列,用户has_many跟随并发表评论。
  • 关注模型的follower_id与用户的ID和follower_type匹配,"User""Tag",以及{{} 1}}。
  • 评论模型的created_at与用户的ID和user_id匹配。

由于我的SQL技能不足,我还没有走得太远。最接近(这仍然很远)我得到的是这样的:

created_at

1 个答案:

答案 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。