Sql BigQuery,如何在where子句中使用别名?

Sql BigQuery,如何在where子句中使用别名?,sql,google-bigquery,Sql,Google Bigquery,我有一个小查询,BigQuery不识别别名maxdate,我试图返回表,但只返回最后一个日期 WITH maxdate AS ( SELECT MAX(DATE(SETTLEMENTDATE)) FROM `biengine-252003.aemo2.daily`) SELECT * FROM `biengine-252003.aemo2.daily` WHERE DATE(SETTLEMENTDATE)= maxdate 您正试图从表maxdate中获

我有一个小查询,BigQuery不识别别名maxdate,我试图返回表,但只返回最后一个日期

WITH
  maxdate AS (
  SELECT
    MAX(DATE(SETTLEMENTDATE))
  FROM
    `biengine-252003.aemo2.daily`)
SELECT
  *
FROM
  `biengine-252003.aemo2.daily`
WHERE
  DATE(SETTLEMENTDATE)= maxdate

您正试图从表
maxdate
中获取
maxdate
的值。向列中添加别名并使用它

WITH
  maxdate AS (
  SELECT
    MAX(DATE(SETTLEMENTDATE)) as mx
  FROM
    `biengine-252003.aemo2.daily`)
SELECT
  *
FROM
  `biengine-252003.aemo2.daily`
WHERE
  DATE(SETTLEMENTDATE) = (SELECT mx FROM maxdate LIMIT 1)
我想把桌子还回去,但只是最后一天

同时,实现这一目标的更有效途径是

#standardSQL
SELECT * EXCEPT(isLastDate) 
FROM (
  SELECT *, DATE(SETTLEMENTDATE) = MAX(DATE(SETTLEMENTDATE)) OVER() isLastDate
  FROM `biengine-252003.aemo2.daily`
)
WHERE isLastDate

您还可以执行以下操作:

with maxdate as (
   select 
      max(date(SETTLEMENTDATE)) as mx
   from
  `biengine-252003.aemo2.daily`
)
select 
   d.* 
from `biengine-252003.aemo2.daily` d
left join maxdate on 1=1
where date(d.SETTLEMENTDATE) = maxdate.mx

奇怪的结算日期是一个分区表,还是BigQuery扫描整个表?你最近的更新改变了你的问题很多!如果你有新问题-你应该把它作为新问题发布!这让您有更好的机会得到答案,同时您尊重那些已经回答了您最初问题的人所做的努力:o)会做的,我的道歉,没问题:o)我添加了一个单独的问题,请参阅更新的问题,该问题询问如何修剪分区以获得较小的扫描。