2011-08-18 27 views
1

我有商店为了信息的电子商务MySQL数据库的表“订单”SQL语句检索所有新客户在特定月份

,我需要选择所有新客户的三月份。客户无需注册订购,所以我只需使用客户电子邮件和订单的日期时间。因此,选择前几个月根本不具备功能的所有客户电子邮件。

数据库表有大约10万行,我正在寻找一个高效的查询。

我不和SQL(你也许能告诉!)太出色了,但是这是我...

SELECT distinct(user_email) FROM orders 
WHERE order_datetime > '2011-03-01 00:00:00' 
     AND order_datetime < '2011-03-31 23:59:59' 
     AND user_email NOT IN (
      SELECT user_email FROM orders 
      WHERE order_datetime < '2011-03-01 00:00:00') 
GROUP BY user_email 

那是一个做事的实在令人费解的方式吗? :)请让我知道如果有一个更快的速度有效的方式......

谢谢,丰富

回答

3

如何:

SELECT user_email 
FROM orders  
GROUP BY user_email 
HAVING MIN(order_datetime) BETWEEN '2011-03-01' AND '2011-03-31 23:59:59'; 
  • 一阶三月是在HAVING子句中检查。
  • 有一个索引order_datetime将有所帮助。
+0

查询是如此之快!完善。谢谢! – Richard

0

这是一个非常合理的实现 - 尽管“按组”是多余的; DISTINCT不是一个聚合函数(http://www.w3schools.com/sql/sql_groupby.asp)。

相关问题