【问题标题】:BigQuery select row_number() over (order by tablename) from dbc.tablesBigQuery 从 dbc.tables 中选择 row_number() over(按表名排序)
【发布时间】:2018-03-14 20:07:28
【问题描述】:

我正在翻译一个非常大的 CTE Teradata 查询,但卡在下面的部分,即它自己的子查询,该子查询正在交叉连接到一个非常大的子查询中。

如何将此查询转换为 Bigquery?

(select row_number() over (order by tablename) subsequent_month from dbc.tables qualify row_number() over (order by tablename) <= 24)

大家觉得呢?

【问题讨论】:

    标签: sql google-bigquery translation teradata row-number


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT subsequent_month FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY tablename) subsequent_month 
      FROM dbc.tables 
    ) WHERE subsequent_month <= 24
    

    【讨论】:

      【解决方案2】:

      您需要qualify 的子查询:

      from (select row_number() over (order by tablename) as subsequent_month
            from dbc.tables
           ) t
      where subsequent_month < 24;
      

      在 Teradata 中,qualify 是适用于窗口函数的“where”子句。它类似于having,它适用于聚合函数。

      【讨论】:

        【解决方案3】:

        这只会返回 24 行,其中包含从 1 到 24 的连续数字。

        因此,将其转换为针对 BigQuery 中任何表的类似查询,或使用现有的 numbers 表。

        【讨论】:

        • 谢谢!我只是不确定 dbc.table 元数据,但这很清楚我可以使用任何表。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        相关资源
        最近更新 更多