2011-08-18 32 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)。

相關問題