2017-09-18 15 views
1

私はすべてのテーブルを結合してレポートを生成しようとしている3つのテーブルを持っています。 表が開きます。複数のテーブルの日付別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つのテーブルで左に参加行う組合を使用して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

関連する問題