问题描述
您能帮我吗,我不明白我的问题在哪里。我尝试了几件事,但未能得出正确的结论。
SELECT
CONCAT(fullvisitorId,"-",CAST(visitstarttime AS STRING)) as session,RANK() OVER(PARTITION BY CONCAT(fullvisitorId,CAST(visitstarttime AS STRING)) ORDER BY hitNumber ASC) AS Rank,(SELECT MAX(cd.value) FROM hits.customDimensions as cd where cd.index = 12) as cd1,(SELECT cd.value FROM hits.customDimensions as cd where cd.index=29) as division,hits.hitnumber
FROM
`dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session,unnest(hits) as hits
WHERE division = 'fsh'
ORDER BY hitnumber ASC
解决方法
division
似乎是select
中定义的列别名。
这在SQL中是不允许的(通常不只是BigQuery)。使用子查询或CTE来定义division
。然后过滤外部查询。
您不能在同一作用域(分开SELECT
子句)中重复使用ORDER BY
子句中定义的列。在这里,最简单的方法可能是将子查询移至FROM
子句:
SELECT
CONCAT(fullvisitorId,"-",CAST(visitstarttime AS STRING)) as session,RANK() OVER(PARTITION BY fullvisitorId,visitstarttime ORDER BY hitNumber) as rank,dim1.cd1,dim2.division,hits.hitnumber
FROM `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session
CROSS JOIN unnest(hits) as hits
CROSS JOIN (SELECT MAX(cd.value) as cd1 FROM hits.customDimensions as cd where cd.index = 12) as dim1
CROSS JOIN (SELECT cd.value as division FROM hits.customDimensions as cd where cd.index = 29) as dim2
WHERE dim2.division = 'fsh'
ORDER BY hitnumber ASC
请注意,我简化了window函数的PARTITION BY
子句:我认为您不需要在这里进行字符串连接,只需使用两级分区即可。
我还将隐式联接更改为显式cross join
。在我看来,这不会改变逻辑,但是可以使意图更加清晰。