Sql 如何按同一查询中生成的列进行筛选?
下面是一个非常简单的查询,其中Sql 如何按同一查询中生成的列进行筛选?,sql,google-bigquery,Sql,Google Bigquery,下面是一个非常简单的查询,其中my_data只包含一行,它只是为了帮助我更好地解释我的问题 WITH my_data AS( SELECT TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp ,50 AS my_customers) SELECT DATE(my_timestamp) AS my_date ,my_customers FROM my_data WHER
my_data
只包含一行,它只是为了帮助我更好地解释我的问题
WITH
my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp
,50 AS my_customers)
SELECT
DATE(my_timestamp) AS my_date
,my_customers
FROM
my_data
WHERE
my_date = "2020-02-11"
这不会在Google Big Query的标准SQL中运行,尽管我记得在过去运行过类似的东西。它不会运行的原因是它不知道my_date是什么,我猜是因为它是在同一个查询中创建的
我的问题是:
my_data
)my_数据
,不使用该过滤器,但使用额外的列my_日期
,然后通过再次查看来过滤它
谢谢为什么不复制您已经在使用的功能
WITH
my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp,
50 AS my_customers)
SELECT
DATE(my_timestamp) AS my_date,
my_customers
FROM
my_data
WHERE
DATE(my_timestamp) = "2020-02-11"
下面的“技巧”是针对BigQuery标准SQL的
#standardSQL
WITH
my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp
,50 AS my_customers)
SELECT
my_date
,my_customers
FROM
my_data,
UNNEST([DATE(my_timestamp)]) AS my_date
WHERE
my_date = "2020-02-11"
我想开始回答你提出的问题
希望获得此帮助。否,您无法在
中筛选中定义的别名,而是在选择中定义的。使用CTE、子查询或重复表达式。将WHERE
更改为HAVING
@mattyx17我刚刚尝试了HAVING
,但它要求所有字段按分组,基本上消除了所有重复行。除非我做错了什么。这就像是一个危险的解决办法@戈登·林诺夫,如果就这些,你能写下来作为答案吗?我明白了。很好的解释。我不熟悉SQL的操作顺序。这是有道理的,我也不是。这件事让我疯狂了很长一段时间,直到我意识到并研究了操作顺序。我相信在一开始的时候,很直观地认为WHERE应该能够根据我们在SELECT上使用的任何东西进行过滤。希望我们现在知道SQL不是这样工作的。很高兴这能帮助我的朋友。嗨,刚刚找到chartio的这个很棒的链接,他们在这里解释了sql查询的顺序。我相信这会有所帮助。
WITH
my_data AS(
SELECT
TIMESTAMP("2020-02-11 13:15:00 UTC") AS my_timestamp,
50 AS my_customers)
SELECT
DATE(my_timestamp) AS my_date,
my_customers
FROM
my_data
WHERE
DATE(my_timestamp) = "2020-02-11"