2017-09-18 4 views
1

모든 테이블을 조인하여 보고서를 생성하려고하는 세 개의 테이블이 있습니다. 표가 열립니다PHP 다중 테이블의 날짜 별 SQL 그룹

id | offer_id | datetime 
1 | 1   | 2017-08-19 00:00:00 
2 | 1   | 2017-08-20 00:00:00 
3 | 1   | 2017-08-20 00:00:00 

테이블을 클릭 :

id | offer_id | datetime 
1 | 1   | 2017-08-20 00:00:00 
2 | 1   | 2017-08-20 00:00:00 
3 | 1   | 2017-08-20 00:00:00 

테이블 변환 :

id | offer_id | datetime 
1 | 1   | 2017-08-20 00:00:00 
2 | 1   | 2017-08-21 00:00:00 
3 | 1   | 2017-08-21 00:00:00 

내가

아래의 출력과 같은 출력을 얻을 수있는 쿼리를 작성해야 필수 :

datetime     | opens  | clicks | conversions 
2017-08-19 00:00:00  | 1   | 0  | 0 
2017-08-20 00:00:00  | 2   | 3  | 1 
2017-08-21 00:00:00  | 0   | 0  | 2 

은 지금까지 나는

SELECT count(DISTINCT opens.id) as opens, 
count(DISTINCT clicks.id) as clicks, 
count(DISTINCT conversions.id) as conversions 
FROM opens 

LEFT JOIN clicks 
ON clicks.offer_id = 1 

LEFT JOIN conversions 
ON conversions.offer_id = 1 

WHERE opens.offer_id = 1 GROUP BY DATE_FORMAT(opens.datetime, '%Y %M %D'), DATE_FORMAT(clicks.datetime, '%Y %M %D'), DATE_FORMAT(conversions.datetime, '%Y %M %D') 

을 시도했지만이 쿼리 나에게 원하는 출력을 제공하지 않습니다. 도와주세요.

답변

1

는 먼저 OFFER_ID 및 날짜에 당신의 3 개 테이블 왼쪽에 가입 할 조합을 사용하여 세 개의 테이블에서 날짜의 목록을 보려면, 아래가 될 수 당신에게 복잡한 SQL을 원하는 결과를 얻으려면

SELECT groupdate, 
COUNT(DISTINCT o.id) AS opens, 
COUNT(DISTINCT c.id) AS clicks, 
COUNT(DISTINCT con.id) AS conversions 
FROM (
    SELECT offer_id,DATE_FORMAT(`datetime`, '%Y %M %D') groupdate FROM opens 
    UNION ALL 
    SELECT offer_id,DATE_FORMAT(`datetime`, '%Y %M %D') groupdate FROM clicks 
    UNION ALL 
    SELECT offer_id,DATE_FORMAT(`datetime`, '%Y %M %D') groupdate FROM conversions 
) t 
LEFT JOIN opens o ON (t.offer_id = o.offer_id AND t.groupdate = DATE_FORMAT(o.`datetime`, '%Y %M %D')) 
LEFT JOIN clicks c ON (t.offer_id = c.offer_id AND t.groupdate = DATE_FORMAT(c.`datetime`, '%Y %M %D')) 
LEFT JOIN conversions con ON (t.offer_id = con.offer_id AND t.groupdate = DATE_FORMAT(con.`datetime`, '%Y %M %D')) 
WHERE t.offer_id = 1 
GROUP BY groupdate 

DEMO

+1

안녕하세요, 당신은 챔피언입니다! 이것은 내가 찾고 있었던 바로 그 것이다. 고마워요! – Sanjeev