Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql select仅统计日期范围之间的重复事件_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql select仅统计日期范围之间的重复事件

Sql select仅统计日期范围之间的重复事件,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,正如您从预期结果中看到的,我必须统计发送后不到24小时重新打开的电子邮件。 现在要计算发送后不到24小时内打开的电子邮件,我有: Source Tables: ( MAILING ) | ID | name | dt | ----------------------------------- | 1 | foo | 15-DEC-15 01.20.25.000000000 AM | 2 | bar | 16-DEC

正如您从预期结果中看到的,我必须统计发送后不到24小时重新打开的电子邮件。 现在要计算发送后不到24小时内打开的电子邮件,我有:

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         |  
谢谢你的帮助和时间

查询:

                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
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