查找使用 ActiveRecord 下了两个或更多订单的用户
Find users who have made two or more orders with ActiveRecord
具有以下 Rails 个模型:
class User < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :user
end
我想要一个查询来查找以下用户:
- 过去在同一个查询中下了 2 个或更多订单
- 按当月下订单的用户过滤
我试过这样的事情:
start_date = 1.month.ago
users = User.joins(:orders)
.where('orders.created_at >= ?', start_date)
.having('COUNT(orders.user_id) > 1')
.group('orders.user_id')
但是没有用。请帮忙。我无法从文档中弄清楚如何使用 having
子句,或者它是否是正确的方法。
如果您需要更多信息,请告诉我。谢谢!
更新:这是 Rails 生成的 sql 查询:
SELECT user_id
FROM "users"
INNER JOIN "orders"
ON "orders"."user_id" = "users"."id"
WHERE (orders.created_at >= '2017-05-02')
GROUP BY orders.user_id
HAVING COUNT(orders.user_id) > 1
您可以查询过去有超过 2 个订单的所有用户及其最新订单 created_at。然后是 select 个用户,他们的最新订单 created_at 不到一个月。像这样:
repeat_users = User.joins(:orders).group("(users.id) having count(users.id) > 2").select("users.*", "max(orders.created_at) as last_order_time")
past_month_users = repeat_users.select{|user| user.last_order_time > Time.now - 1.month}
具有以下 Rails 个模型:
class User < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :user
end
我想要一个查询来查找以下用户:
- 过去在同一个查询中下了 2 个或更多订单
- 按当月下订单的用户过滤
我试过这样的事情:
start_date = 1.month.ago
users = User.joins(:orders)
.where('orders.created_at >= ?', start_date)
.having('COUNT(orders.user_id) > 1')
.group('orders.user_id')
但是没有用。请帮忙。我无法从文档中弄清楚如何使用 having
子句,或者它是否是正确的方法。
如果您需要更多信息,请告诉我。谢谢!
更新:这是 Rails 生成的 sql 查询:
SELECT user_id
FROM "users"
INNER JOIN "orders"
ON "orders"."user_id" = "users"."id"
WHERE (orders.created_at >= '2017-05-02')
GROUP BY orders.user_id
HAVING COUNT(orders.user_id) > 1
您可以查询过去有超过 2 个订单的所有用户及其最新订单 created_at。然后是 select 个用户,他们的最新订单 created_at 不到一个月。像这样:
repeat_users = User.joins(:orders).group("(users.id) having count(users.id) > 2").select("users.*", "max(orders.created_at) as last_order_time")
past_month_users = repeat_users.select{|user| user.last_order_time > Time.now - 1.month}