输出自MySQL特定日期范围以来没有重复订购的客户

时间:2014-04-22 15:13:15

标签: mysql sql

我已经四处寻找,但没有发现任何看似完全相关的东西,所以我要求一些帮助。

我有一个包含订单的单个表,人们可以拥有多个订单。我需要能够选择2年前(2012年4月)他们从未购买过的人,因为没有唯一的客户ID,因此我找到了使用电子邮件地址的独特人士。这是订单表字段:

orderid,order date,name,email

我的SQL知识有限,但我之前的方法是输出2012年4月的订单表和2012年5月到现在的另一个表。然后我比较了两个表来找到自那以后没有订购的客户。

我不禁觉得在一个查询中有更有效的方法可以做到这一点。有人可以帮忙吗?

谢谢, 萨姆。

2 个答案:

答案 0 :(得分:3)

我会在这里使用LEFT JOIN:

SELECT DISTINCT order1.email
FROM `order` order1
LEFT JOIN (SELECT email FROM `order` WHERE orderdate >= '2012-05-01') order2
  ON order1.email = order2.email
WHERE orderdate < '2012-05-01'
  AND order2.email IS NULL;

主要查询是检查2012年5月之前订购的人员,LEFT JOIN查询正在检查(order2.email IS NULL)以查找从那时起未订购过的人。

答案 1 :(得分:-1)

您可以编写此查询而无需任何类似的联接: -

select email
from order
where email not in (select email from order where order_date >"April 2012")
  and order_date < "April 2012";

在这里,第一个条件过滤掉了过去两年内购买的所有客户,从第二个条件过滤了两年前购买过的客户。

根据建议,使用NOT EXISTS的查询将如下所示:

select o1.email
from order o1
where not exists (select 1 from order o2 where o2.order_date > "April 2012" and o1.email = o2.email)
  and o1.order_date < "April 2012";