sql - 查找至少有1个订单的用户并且每个订单都有条件。使用计数?

时间:2012-02-24 17:47:44

标签: mysql join

我在rails 2.3中运行MySQL数据库。我在此查询中与之交互的模型关联如下:

模型:用户和订单

用户有1封电子邮件

用户有很多订单

订单已在日期创建

我想列出所有用户的电子邮件列表,这些用户至少有一个订单,最新订单至少3个月(所以,我们今天说的是2012年2月24日,最后一个订单于2011年11月24日或之前发布)

我知道如何使用此查询获取在11月11日或之前创建的订单:

SELECT * FROM orders WHERE created_at <= "2011-11-24 00:00:00.000000 -08:00"

我不知道如何查找至少有1个订单的用户并且每个订单都有这些条件。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

我有另一个答案。我刚刚注意到你正在使用rails 2.3

在这种情况下,也许:

User.all.orders(:conditions => ["created_at > ?", Time.now - 3.months])

将订单作为默认范围放入订单模型中,例如

default_scope :order_by => 'created_at'

语法可能需要一些工作,因为我主要使用带有AREL语法的Rails 3

答案 1 :(得分:1)

SELECT users.email
FROM users
  JOIN
    ( SELECT user_id, MAX(created_at) AS created_at
      FROM orders
      GROUP BY user_id
      HAVING MAX(created_at) < CURDATE() - INTERVAL 3 MONTH
    ) AS oo
    ON oo.user_id = users.id
ORDER BY oo.created_at DESC

答案 2 :(得分:0)

SELECT users.email
FROM orders, users
WHERE orders.user_id = users.id
AND orders.created_at < CURDATE() - INTERVAL 3 MONTH
ORDER BY orders.created_at DESC