我有一张包含所有购买商品的表格.
我需要检查哪些用户在特定时间段(例如2013-03-21至2013-04-21之间)购买了商品,之后从未购买任何商品.
我可以选择在那段时间内购买商品的用户,但我不知道如何过滤那些从未购买任何商品的用户……
SELECT `userId`, `email` FROM my_table
WHERE `date` BETWEEN '2013-03-21' AND '2013-04-21' GROUP BY `userId`
解决方法:
试一试
SELECT
user_id
FROM
my_table
WHERE
purchase_date >= '2012-05-01' --your_start_date
GROUP BY
user_id
HAVING
max(purchase_date) <= '2012-06-01'; --your_end_date
它的工作原理是获取所有记录> =开始日期,按user_id对结果集进行分组,然后找到每个用户的最大购买日期.最大购买日期应为< =结束日期.由于此查询不使用join / inner查询,因此可能更快
测试数据
CREATE table user_purchases(user_id int, purchase_date date);
insert into user_purchases values (1, '2012-05-01');
insert into user_purchases values (2, '2012-05-06'