Return 只有 BigQuery 中的最新行 table 具有重复项

Return only the newest rows from a BigQuery table with a duplicate items

我有一个 table,其中有许多重复的项目 – 许多行具有相同的 id,可能唯一的区别是 requested_at 列。

我想从 table 做一个 select *,但只有 return 一行具有相同的 id – 最近请求的。

我已经查看了 group by id,但我需要对每一列进行汇总。 requested_at - max(requested_at) as requested_at 这很容易 - 但其他人很难。

我如何确保获得与最近更新的行相对应的 title 等值?

尝试这样的事情:

    SELECT *
    FROM (
      SELECT
          *,
          ROW_NUMBER()
              OVER (
                  PARTITION BY <id_column>
                  ORDER BY <timestamp column> DESC)
              row_number,
      FROM <table>
    )
    WHERE row_number = 1

请注意,它会添加一个您可能不需要的 row_number 列。要解决此问题,您可以在外部 select 语句中按名称 select 各个列。

在您的情况下,requested_at 列听起来像是您想在 ORDER BY 中使用的列。

而且,您还需要使用 allow_large_results,设置目标 table,并指定不对结果进行扁平化(如果您的架构包含重复字段)。

我建议使用类似的形式来避免 window 函数中的排序:

SELECT *
    FROM (
      SELECT
          *,
          MAX(<timestamp_column>)
              OVER (PARTITION BY <id_column>)
              AS max_timestamp,
      FROM <table>
    )
    WHERE <timestamp_column> = max_timestamp