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')
但它似乎无论如何都会抓住用户的订单?
答案 0 :(得分: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;
另外,我想查询一下根本没有订单的用户电子邮件查询(订单表中没有行)?
为位于交叉点之外的记录创建外部联接和过滤器:
SELECT users.email
FROM users LEFT JOIN orders ON orders.user_id = users.id
WHERE orders.user_id IS NULL