0

我有这个大查询,我在下面加入了五个查询:

--Combined Daily Actions Per Revenue Source-- 
SELECT Two.the_date, 
       sp_dau, 
       cs_dau, 
       tapjoy_ios_dau, 
       tapjoy_android_dau, 
       appcircle_ios_dau, 
       appcircle_android_dau, 
       freecause_dau, 
       portal_dau 
FROM   (SELECT Trunc(Cs.create_dtime) AS The_Date, 
               Count(DISTINCT CASE 
                                WHEN Cs.cs_listing_id LIKE '99999999%' THEN 
                                ( Cs.player_id ) 
                              END)    AS Sp_Dau, 
               Count(DISTINCT CASE 
                                WHEN Cs.cs_listing_id NOT LIKE '99999999%' THEN 
                                ( Cs.player_id ) 
                              END)    AS Cs_Dau 
        FROM   player_chkin_cs Cs 
        WHERE  Trunc(Cs.create_dtime) >= To_date('2012-Jan-01', 'yyyy-mon-dd') 
        GROUP  BY Trunc(Cs.create_dtime)) One 
       INNER JOIN (SELECT Trunc(Tap.create_dtime) AS The_Date, 
                          Count(DISTINCT CASE 
                                           WHEN ( Play.uuid LIKE 'i~%' ) 
                                                 OR ( Play.uuid LIKE 'ti~%' ) 
                                         THEN 
                                           Tap.player_id 
                                         END)     AS Tapjoy_Ios_Dau, 
                          Count(DISTINCT CASE 
                                           WHEN ( Play.uuid LIKE 'a~%' ) 
                                                 OR ( Play.uuid LIKE 'ta~%' ) 
                                         THEN 
                                           Tap.player_id 
                                         END)     AS Tapjoy_Android_DAU 
                   FROM   player_tapjoy Tap 
                          INNER JOIN player Play 
                                  ON Tap.player_id = Play.player_id 
                   WHERE  Trunc(Tap.create_dtime) >= 
                          To_date('2012-Jan-01', 'yyyy-mon-dd') 
                   GROUP  BY Trunc(Tap.create_dtime)) Two 
               ON One.the_date = Two.the_date 
       INNER JOIN (SELECT Trunc(Aux.create_dtime) AS The_Date, 
                          Count(DISTINCT CASE 
                                           WHEN ( Play.uuid LIKE 'i~%' ) 
                                                 OR ( Play.uuid LIKE 'ti~%' ) 
                                         THEN 
                                           Aux.player_id 
                                         END)     AS Appcircle_Ios_Dau, 
                          Count(DISTINCT CASE 
                                           WHEN ( Play.uuid LIKE 'a~%' ) 
                                                 OR ( Play.uuid LIKE 'ta~%' ) 
                                         THEN 
                                           Aux.player_id 
                                         END)     AS AppCircle_Android_DAU 
                   FROM   player_aux_pt Aux 
                          INNER JOIN player Play 
                                  ON Aux.player_id = Play.player_id 
                   WHERE  Aux.site = 'AppCircle' 
                          AND Trunc(Aux.create_dtime) >= 
                              To_date('2012-Jan-01', 'yyyy-mon-dd') 
                   GROUP  BY Trunc(Aux.create_dtime))Three 
               ON Two.the_date = Three.the_date 
       INNER JOIN (SELECT Trunc(Aux.create_dtime)       AS The_Date, 
                          Count(DISTINCT Aux.player_id) AS FreeCause_DAU 
                   FROM   player_aux_pt Aux 
                   WHERE  Aux.site = 'ext : freecause' 
                          AND Trunc(Aux.create_dtime) >= 
                              To_date('2012-Jan-01', 'yyyy-mon-dd') 
                   GROUP  BY Trunc(Aux.create_dtime))Four 
               ON Three.the_date = Four.the_date 
       INNER JOIN (SELECT Trunc(Aux.create_dtime)       AS The_Date, 
                          Count(DISTINCT Aux.player_id) AS Portal_DAU 
                   FROM   player_aux_pt Aux 
                   WHERE  ( Aux.site = 'Portal : Promotion' 
                             OR Aux.site = 'Portal : RadiumOne' 
                             OR Aux.site = 'Portal : Paymentwall' 
                             OR Aux.site = 'Portal : TrialPay' ) 
                          AND Trunc(Aux.create_dtime) >= 
                              To_date('2012-Jan-01', 'yyyy-mon-dd') 
                   GROUP  BY Trunc(Aux.create_dtime)) Five 
               ON Four.the_date = Five.the_date 

大多数子查询的范围是从2012-Jan-01到当前日期,除了一个只有从09-Jul-12到现在的数据。

因此,当我运行此查询时,结果中的第一个日期是09-Jul-12and not 01-Jan-12

我怎样才能得到从 开始的结果Jan 01,除了一个查询之外的所有查询都有相关数据?

4

1 回答 1

2

您的问题是日期因为不匹配而退出。你的问题的答案是LEFT OUTER JOIN而不是INNER JOIN。这将保留第一个表(连接的左侧)中的所有行,以及下一个表中的任何匹配信息。如果没有匹配,则所有值都变为 NULL。

假设第一个表包含您想要的所有日期,然后在所有后续查询中更改连接。

如果你想用 0 代替 NULL,那么coalesce()select子句中使用来转换它们。

于 2012-09-27T18:07:18.520 回答