2011-08-18 1 views
1

에 모든 신규 고객을 검색하는 테이블 '주문'SQL 문은 내가에서 주문 정보를 저장하는 전자 상거래 MySQL 데이터베이스가 특정 월

내가 3 월에 대한 모든 새로운 고객을 선택해야합니다. 고객은 주문을 등록 할 필요가 없으므로 고객의 이메일과 주문 날짜 시간만으로 간단하게 작업하고 있습니다. 따라서 지난 달에 전혀 기능을 수행하지 않은 모든 고객 이메일을 선택하십시오.

데이터베이스 테이블에는 약 100,000 개의 행이 있으며 효율적인 쿼리를 찾고 있습니다.

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 

이 일을 정말 복잡한 방법인가요 ... 나는 SQL (당신은 아마 말할 수 있습니다!) 너무 좋은 아니에요,하지만 내가 가진 무엇인가? :) ... 더 속도 효율적인 방법이 있으면 알려 꽤 합리적인 구현의 풍부한

답변

3

방법 : 2006 년 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). 이것에 대해