代码之家  ›  专栏  ›  技术社区  ›  Jiew Meng

如何根据最新更新的行进行“重复数据消除”

  •  0
  • Jiew Meng  · 技术社区  · 7 年前

    ID     Name      Last Update
    ============================
    1      A         1 JAN 2018
    1      A         2 JAN 2018
    1      A         3 JAN 2018
    2      B         3 JAN 2018
    2      B         6 JAN 2018
    

    我想得到结果

    ID     Name      Last Update
    ============================
    1      A         3 JAN 2018
    2      B         6 JAN 2018
    

    我该怎么做?

    我试着按ID分组,但是,如何获得最新的?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Lars Br.    7 年前

    而@Nik的解决方案可以在没有关系的情况下工作 MAX(date) 值(或者不管选择哪个tie值以及是否生成多个输出行),另一种方法是按 ID 将属于一个组的所有记录按 date 按降序排列,然后选择每组的第一个结果行。

    这可以通过使用SQL标准窗口函数来实现 ROW_NUMBER() 这样地:

    SELECT ID, NAME, DATE
    FROM (
          SELECT ROW_NUMBER() OVER (PARTITION BY ID 
                                   ORDER BY DATE DESC) RN
                , ID
                , NAME
                , DATE
          FROM <TABLE_NAME>
          ) 
    WHERE RN = 1;
    
        2
  •  0
  •   Lars Br.    7 年前

    您可以使用这样的查询来获得所需的结果:

    SELECT *
    FROM   table
    WHERE  (ID, date) IN (SELECT 
                                ID, MAX(Last Update) 
                          FROM table
                          GROUP BY ID)