использование EXISTS с псевдонимом в BigQuery - PullRequest
0 голосов
/ 04 марта 2019

Я просто пытаюсь ограничить данные с помощью предложения exist, но, похоже, он не распознает псевдоним внутри предложения EXISTS (как это было бы в Oracle)

Я использую этот sql

select count(1) from 
 (select distinct 
         case when qp_cguid is null then ssid else qp_cguid end cguid,
         case when qp_vid is null then vid else qp_vid end as visit_id,
         TIMESTAMP_MILLIS(creation_date_time) visit_date_time
      from `zone1.table1` as t1
      where _partitiontime in ( timestamp( '2019-01-01') )
    and case when qp_vid is null then vid else qp_vid end is not null 
    and case when qp_cguid is null then ssid else qp_cguid end is not null 
    and exists
            (
             select 1 from `zone2.ga_temp` AS    ga 
             where ga.cguid = t1.cguid 
  and (t1.visit_date_time between TIMESTAMP_ADD(ga.min_hit_time_utc, INTERVAL -10 SECOND) and TIMESTAMP_ADD(ga.max_hit_time_utc, INTERVAL 10 SECOND))
            )
)      

, которая дает мне эту ошибку

"Имя cguid не найдено внутри t1"

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете попробовать этот подход

WITH zone2 AS (
  select cguid from `zone2.ga_temp` AS ga 
),
zone1 AS (
  select distinct 
   case when qp_cguid is null then ssid else qp_cguid end cguid,
   case when qp_vid is null then vid else qp_vid end as visit_id,
   TIMESTAMP_MILLIS(creation_date_time) visit_date_time
  from `zone1.table1` as t1
  where _partitiontime in ( timestamp( '2019-01-01') )
    and case when qp_vid is null then vid else qp_vid end is not null 
    and case when qp_cguid is null then ssid else qp_cguid end is not null 
)
SELECT count(1) FROM zone1 INNER JOIN zone2 ON zone1.cguid = zone2.cguid 
WHERE 
  and (zone1.visit_date_time between TIMESTAMP_ADD(ga.min_hit_time_utc, INTERVAL -10 SECOND) and TIMESTAMP_ADD(ga.max_hit_time_utc, INTERVAL 10 SECOND))
...