用于检索特定月份中的所有新客户的SQL语句

时间:2011-08-18 13:42:18

标签: mysql sql

我有一个电子商务MySQL数据库,可以在“订单”表中存储订单信息

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

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

我对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

这是一种非常复杂的做事方式吗? :)如果速度更快,请告诉我......

谢谢,Rich

2 个答案:

答案 0 :(得分: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上设置索引会有所帮助。

答案 1 :(得分:0)

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