【问题标题】:BigQuery row_number to remove duplicatesBigQuery row_number 删除重复项
【发布时间】:2021-09-01 16:21:04
【问题描述】:

我想只保留表中时间戳最新的ID,有没有更优化和更有效的方法来解决这个问题

我尝试过的一个查询

SELECT * except(row_number)
FROM (
  SELECT
      *,
      ROW_NUMBER()
          OVER (PARTITION BY ID)
          row_number
  FROM employees 

)
WHERE row_number = 1

员工表:

    ID    NAME  DEPARTMENT   UPDATED_AT
    1     James IT           2019-05-21 12:13:14
    1     James IT           2019-05-21 12:14:14 
    1     James IT           2019-05-21 12:18:14
    2     Pam   HR           2019-05-26 13:18:14
    2     Pam   HR           2019-05-26 14:18:14
    3     David IT           2019-06-22 14:18:14
    3     David IT           2019-06-23 12:18:14

结果:

    ID    NAME  DEPARTMENT   UPDATED_AT
    1     James IT           2019-05-21 12:18:14
    2     Pam   HR           2019-05-26 14:18:14
    3     David IT           2019-06-23 12:18:14

【问题讨论】:

    标签: google-bigquery mysql-8.0


    【解决方案1】:

    您只是在子查询语句中缺少ORDER BY 子句。

    WITH
      DATA AS (
        SELECT
           ROW_NUMBER() OVER (PARTITION BY ID ORDER BY UPDATED_AT DESC) AS _row,
           *
        FROM
          employees )
    SELECT
      * EXCEPT(_row)
    FROM
      DATA
    WHERE
      _row = 1
    

    【讨论】:

      【解决方案2】:
      SELECT *
      FROM employees 
      WHERE TRUE
      QUALIFY ROW_NUMBER() OVER (PARTITION BY ID ORDER BY UPDATED_AT DESC) = 1
      

      【讨论】:

        猜你喜欢
        • 2012-04-16
        • 1970-01-01
        • 2021-02-19
        • 2019-04-13
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        • 2019-05-08
        • 2020-06-02
        相关资源
        最近更新 更多