Sql 连接两个不同的表,其中用户id等于并在两个日期之间创建

Sql 连接两个不同的表,其中用户id等于并在两个日期之间创建,sql,activerecord,ruby-on-rails-5.2,Sql,Activerecord,Ruby On Rails 5.2,在我的应用程序中,我有3种型号User,Visit,Post。我想要实现的是选择属于用户的访问和帖子,其中在创建的时间介于2个日期和按日期分组之间(我使用按日期分组)并在当天的访问和帖子上返回计数 我试过几次,但都不走运: User.joins(:visits,:posts).where("visits.user_id = ?, posts.user_id = ?", current_user.id, current_user.id) .where("visits.created_at

在我的应用程序中,我有3种型号
User
Visit
Post
。我想要实现的是选择属于
用户
访问
帖子
,其中
创建的时间介于2个日期和
日期分组
之间(我使用
按日期分组
)并在当天的
访问
帖子
上返回
计数

我试过几次,但都不走运:

User.joins(:visits,:posts).where("visits.user_id = ?, posts.user_id = ?", current_user.id, current_user.id)
    .where("visits.created_at >= ? AND visits.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
    .where("posts.created_at >= ? AND posts.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
    .group_by_day(:created_at, range: 15.days.ago.midnight.in_time_zone("Berlin")..Time.now.in_time_zone("Berlin"), format: "%d %b")
    .count
我的模型:

课堂参观
我一直在四处寻找,尝试了几种不同的方法,但都没有成功。
任何rails帮助,只要是简单的
sql
或提示,我们都将不胜感激并提前感谢

试试这个:

_start_time = 15.days.ago.midnight.in_time_zone("Berlin") ## get start time
_end_time = 2.days.ago.midnight.in_time_zone("Berlin") ## get end time

 #### query ###
User.joins(:visits, :posts).where(visits: { created_at: (_start_time.._end_time) }).where(posts: { created_at: (_start_time.._end_time) }).group_by_day(:created_at, range: _start_time..Time.now.in_time_zone("Berlin"), format: "%d %b").count

谢谢@prakash<代码>sql
输出是
选择COUNT(*)作为COUNT\u all,strftime(“%Y-%m-%d 00:00 UTC”,“用户”,“创建时间”)作为strftime\u Y\u m\u d\u 00\u UTC\u用户,创建时间是从“访问”中的“用户”内部连接“访问”。“用户id”=“用户”,“id”内部连接“帖子”关于“帖子”,“用户id”=“用户”,“id”在“访问”之间创建的“用户”?然后呢?和“posts”.“created_at”之间?然后呢?和(“用户”。“创建时间”>=“2020-01-21 00:00:00”和“用户”。“创建时间”@Rubioli在您的查询中,您在两个表上都使用created_at来筛选数据,并且看起来您没有任何索引,这就是为什么查询要花这么长时间才能获得输出。请分享您期望的输出,并提供更多详细信息。感谢您的回复。我在
为created_添加了索引,但速度仍然非常慢。我正在寻找的是按天获取用户的
访问
发布
class Visit < ApplicationRecord
  belongs_to :user
end

class Post < ApplicationRecord
    belongs_to :user
end

class User < ApplicationRecord
  has_many :visits
  has_many :posts
end
_start_time = 15.days.ago.midnight.in_time_zone("Berlin") ## get start time
_end_time = 2.days.ago.midnight.in_time_zone("Berlin") ## get end time

 #### query ###
User.joins(:visits, :posts).where(visits: { created_at: (_start_time.._end_time) }).where(posts: { created_at: (_start_time.._end_time) }).group_by_day(:created_at, range: _start_time..Time.now.in_time_zone("Berlin"), format: "%d %b").count