2016-06-20 6 views
0
Source Tables: 
(MAILING) 
| ID  | name  | dt  | 
----------------------------------- 
| 1  | foo  | 15-DEC-15 01.20.25.000000000 AM 
| 2  | bar  | 16-DEC-15 01.20.25.000000000 AM 

(OPEN) 
| ID  | mailing | dt  | 
--------------------------------- 
| 1  | 1  | 15-DEC-15 03.20.25.000000000 AM 
| 2  | 1  | 15-DEC-15 05.20.25.000000000 AM 
| 3  | 2  | 16-DEC-15 03.20.25.000000000 AM 

Expected result: 
| name | TOTAL  |  
---------------------- 
| foo | 1   | 
| bar | 0   | 

予想された結果からわかるように、送信後24時間以内に再開された電子メールをカウントする必要があります。 電子メールが開かれた今カウントする24時間未満の後に私が持って送信しますSqlの選択カウントのみ日付範囲の間の繰り返し回数

   SELECT M.ID, COUNT(*) TOTAL 
        FROM MAILING.MAILING M 

       LEFT JOIN MAILING.OPEN O 
        ON O.mailing = M.ID 

       -- mailing between year 
       WHERE M.dt >= to_timestamp('01-Jan-2015', 'dd-MON-yyyy') 
        AND M.dt <= to_timestamp('31-Dec-2015', 'dd-MON-yyyy') 

        -- opened less than 24h after send 
        AND O.dt <= m.DATA_MAILING + INTERVAL '24' HOUR 

       GROUP BY M.ID, M.name, M.dt 

       ORDER BY M.dt ASC 

おかげであなたの助けと時間のために!

答えて

1

クエリ

SELECT name, 
     COUNT(opened_multiple) AS total 
FROM (
    SELECT m.name, 
     LAG(1) OVER (PARTITION BY mailing ORDER BY o.id) AS opened_multiple 
    FROM mailing m 
     LEFT OUTER JOIN 
     open o 
     ON ( m.id = o.mailing 
      AND o.dt BETWEEN m.dt AND m.dt + INTERVAL '24' HOUR) 
    WHERE m.dt >= TIMESTAMP '2015-01-01 00:00:00' 
    AND m.dt < TIMESTAMP '2016-01-01 00:00:00' 
) 
GROUP BY name; 

出力

NAME TOTAL 
---- ----- 
foo  1 
baa  0 
関連する問題