2014-12-19 5 views
0

저는 고객을위한 테이블과 활동 테이블을 2 개 가지고 있습니다. 얼마나 많은 고객이 특정 활동이 2 개 있는지 찾으려고 노력 중입니다. 예를 들어, 얼마나 많은 고객이 지점에 구입하여 도착했는지. 이 쿼리입니다. (모든 고객이 한 것을 행동에 대해 내가 활동 테이블에 라인을 가지고) :하위 쿼리 및 기본 쿼리의 날짜 이전

SELECT COUNT(*) as total FROM activity 
WHERE activity = 'arrived' AND 
customerid IN 
(SELECT DISTINCT(customerid) FROM activity 
WHERE activity = 'bought') 

하지만 웹 사이트에서 구매 한 고객이 있기 때문에 나는 그들이 arrvied 후에 구입하는 방법을 많이 알 필요가 예를 들어 1 년 후 지점에 도착한 것보다 그래서 나는 도착하고 구입 한 고객만을 원합니다.

SELECT COUNT(*) as total, daten as odaten FROM activity 
WHERE activity = 'arrived' AND 
customerid IN 
(SELECT DISTINCT(customerid), daten as tdaten FROM activity 
WHERE activity = 'bought') HAVING odaten < tdaten 

있지만 작동하지 않습니다 .. 어떤 생각 : 나는이 시도?

답변

0

잘못된 방향입니다. 하위 쿼리를 사용해서는 안됩니다. 대신 자기 조인을 시도해야합니다.

--activity customerid daten 
select count(customerid) as finalcount from(
select distinct t1.customerid 
from tablename t1 
inner join tablename t2 on t1.customerid=t2.customerid 
where t1.activity='arrivived' and t2.activity='bought' and t1.daten<t2.daten 
)t 
+0

당신을 감사합니다 이런 식으로 뭔가를 시도 할 수 있습니다 : 여기 내 솔루션입니다! 그 일! –

0

당신은

SELECT COUNT(a.*) 
FROM activity a 
INNER JOIN 
(SELECT customerid, MAX(daten) as BoughtDate 
    FROM activity 
    WHERE activity = 'bought' 
    GROUP BY customerid) t 
ON a.customerid = t.customerid 
WHERE a.activity = 'arrived' 
    AND a.daten < t.BoughtDate 
관련 문제