仅返回BigQuery表中包含重复项的最新行

时间:2015-12-08 20:09:20

标签: google-bigquery

我有一个包含许多重复项目的表格 - 许多行具有相同的id,可能唯一的区别是requested_at列。

我想从表中执行select *,但只返回一行id - 最近请求的行。

我调查了group by id,但后来我需要为每一列做一个聚合。 requested_at - max(requested_at) as requested_at很容易实现这一点 - 但其他方面很难。

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

2 个答案:

答案 0 :(得分:9)

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

iex> presence = %Presence{ user_id: 1, event_id: 1 } |> Repo.insert!

答案 1 :(得分:2)

尝试这样的事情:

    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语句中按名称选择单个列。

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

并且,您还需要使用allow_large_results,设置目标表,并指定不对结果进行展平(如果您的模式包含重复字段)。