BigQuery select row_number() 来自 dbc.tables(按表名排序)
BigQuery select row_number() over (order by tablename) from dbc.tables
我正在翻译一个非常大的 CTE Teradata 查询,并卡在了它自己的子查询的以下部分,该子查询正在交叉连接成一个非常大的子查询。
如何将此查询转换为 Bigquery?
(select row_number() over (order by tablename) subsequent_month from dbc.tables qualify row_number() over (order by tablename) <= 24)
有什么想法吗?
您需要 qualify
:
的子查询
from (select row_number() over (order by tablename) as subsequent_month
from dbc.tables
) t
where subsequent_month < 24;
在 Teradata 中,qualify
是一个 "where" 子句,适用于 window 函数。它类似于 having
作用于聚合函数。
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT subsequent_month FROM (
SELECT ROW_NUMBER() OVER (ORDER BY tablename) subsequent_month
FROM dbc.tables
) WHERE subsequent_month <= 24
这只是 returns 24 行从 1 到 24 的连续数字。
因此将其转换为针对 BigQuery 中任何 table 的类似查询,或使用现有的 numbers table.
我正在翻译一个非常大的 CTE Teradata 查询,并卡在了它自己的子查询的以下部分,该子查询正在交叉连接成一个非常大的子查询。
如何将此查询转换为 Bigquery?
(select row_number() over (order by tablename) subsequent_month from dbc.tables qualify row_number() over (order by tablename) <= 24)
有什么想法吗?
您需要 qualify
:
from (select row_number() over (order by tablename) as subsequent_month
from dbc.tables
) t
where subsequent_month < 24;
在 Teradata 中,qualify
是一个 "where" 子句,适用于 window 函数。它类似于 having
作用于聚合函数。
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT subsequent_month FROM (
SELECT ROW_NUMBER() OVER (ORDER BY tablename) subsequent_month
FROM dbc.tables
) WHERE subsequent_month <= 24
这只是 returns 24 行从 1 到 24 的连续数字。
因此将其转换为针对 BigQuery 中任何 table 的类似查询,或使用现有的 numbers table.