CREATE TABLE x ( u bigint, t string, st string ) PARTITIONED BY (`date` string) STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB"); CREATE TABLE y ( u bigint ) PARTITIONED BY (`date` string) STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB"); CREATE TABLE z ( u bigint ) PARTITIONED BY (`date` string) STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB"); CREATE TABLE v ( t string, st string, id int ) STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB"); EXPLAIN SELECT o.u, n.u FROM ( SELECT m.u, Min(`date`) as ft FROM ( SELECT u, `date` FROM x WHERE `date` < '2014-09-02' UNION ALL SELECT u, `date` FROM y WHERE `date` < '2014-09-02' UNION ALL SELECT u, `date` FROM z WHERE `date` < '2014-09-02' ) m GROUP BY m.u ) n LEFT OUTER JOIN ( SELECT x.u FROM x JOIN v ON (x.t = v.t AND x.st <=> v.st) WHERE x.`date` >= '2014-03-04' AND x.`date` < '2014-09-03' GROUP BY x.u ) o ON n.u = o.u WHERE n.u <> 0 AND n.ft <= '2014-09-02'; SELECT o.u, n.u FROM ( SELECT m.u, Min(`date`) as ft FROM ( SELECT u, `date` FROM x WHERE `date` < '2014-09-02' UNION ALL SELECT u, `date` FROM y WHERE `date` < '2014-09-02' UNION ALL SELECT u, `date` FROM z WHERE `date` < '2014-09-02' ) m GROUP BY m.u ) n LEFT OUTER JOIN ( SELECT x.u FROM x JOIN v ON (x.t = v.t AND x.st <=> v.st) WHERE x.`date` >= '2014-03-04' AND x.`date` < '2014-09-03' GROUP BY x.u ) o ON n.u = o.u WHERE n.u <> 0 AND n.ft <= '2014-09-02';