0
SELECT users.email FROM users
INNER JOIN orders
ON orders.user_id = users.id
WHERE orders.status = 'new'
AND orders.date_created > three months back?

我想从今天起 3 个月内获取所有未在我的网站上下订单的用户电子邮件。因此,如果 3 个月内没有订单,请抓住电子邮件。

date_created是类型 TIMESTAMP。所以一个例子是:2012-11-10 23:54:20

另外我想要一个查询来获取根本没有下过任何订单的用户电子邮件(订单表中没有行)?

我试过:

SELECT users.email FROM users
    WHERE users.id NOT IN (select user_id from orders where user_id = users.id and orders.status = 'new')

但它似乎还是用订单来抢用户?

4

1 回答 1

1
  1. 我想从今天起 3 个月内获取所有未在我的网站上下订单的用户电子邮件。

    按用户对订单进行分组,并针对最近一次订单超过 3 个月前的订单过滤结果:

    SELECT   users.email
    FROM     users JOIN orders ON orders.user_id = users.id
    GROUP BY orders.user_id
    HAVING   MAX(orders.date_created) < CURRENT_DATE - INTERVAL 3 MONTH;
    
  2. 另外我想要一个查询来获取根本没有下过任何订单的用户电子邮件(订单表中没有行)?

    对交集之外的记录进行外部连接和过滤:

    SELECT   users.email
    FROM     users LEFT JOIN orders ON orders.user_id = users.id
    WHERE    orders.user_id IS NULL
    
于 2012-11-10T23:24:43.530 回答