2013-12-17 5 views
0

테이블 트랜잭션이 있으며 주어진 달에 새로운 고객을 파악하려고합니다. 즉, 고객이 매월 이전에 거래를하지 않은 경우 신규 고객으로 간주됩니다.다른 조건을 가진 동일한 테이블에서 mysql 쿼리 내부 조인

나는 길을 찾았지만 심각하게 비효율적이며 나이가 들었다. 나는 다른 방법을 비교하는이 artikel을 발견했습니다. 나는 성공하지 못한 채 그 방법을 조정하려했습니다.

|--------------------------- time period with all transactions -----------------------| 
|----- period before month transactions = 0) ---|---- curr month transactions > 0 ----| 

표는 다음과 같습니다 :

transactions 
id, email, state, date_paid 

내 쿼리 : 내가 잘못 뭐하는 거지

SELECT 
    l.email 
FROM 
    transactions as l 
LEFT JOIN transactions as r ON r.email = l.email 
WHERE 
    r.email IS NULL 
AND l.state = 'paid' 
AND r.state = 'paid' 
AND l.date_paid <= '2013-12-31 23:59:59' 
AND r.date_paid < '2013-12-01 00:00:00' 

?

내 문제를 시각화하는 방법

답변

0

이 시도 :

SELECT l.email 
FROM transactions AS l 
LEFT JOIN transactions AS r ON r.email = l.email AND r.state = 'paid' AND r.date_paid < '2013-12-01 00:00:00' 
WHERE r.email IS NULL AND l.state = 'paid' AND l.date_paid <= '2013-12-31 23:59:59' 
+0

들으을. 나는 두 가지 방법을 시도했고 네가 많이 빨랐다. l.email에 DISTINCT 조건이나 GROUPED를 넣을 수 있습니까? 쿼리를 깰 싶지 않아 :) – Tino

0

이 시도 : 대답에 대한

SELECT l.email 
FROM transactions l 
WHERE NOT l.email IN (SELECT r.email 
         FROM transactions r 
         WHERE r.state = 'paid' AND r.date_paid < '2013-12-01 00:00:00') 
     AND l.state = 'paid' AND l.date_paid <= '2013-12-31 23:59:59' 
관련 문제