【问题标题】:How to override past records in SQL?如何在 SQL 中覆盖过去的记录?
【发布时间】:2022-01-25 13:19:54
【问题描述】:

我有一个 SQL 表,其中一个字段可以在多条记录中具有相同的值。例如:

我想为每个UserID 选择一次EndTimeUserId。如果有多条记录具有相同的UserID,我想选择最近的记录并覆盖过去的记录。

我正在使用 python 中的Sqlite

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    可以使用ROW_NUMBER()等窗口函数

    SELECT EndTime, userID
      FROM
      (
       SELECT ROW_NUMBER() OVER (PARTITION BY userID ORDER BY StartTime DESC) AS rn,
              t.* 
         FROM t 
      ) AS tt
     WHERE rn = 1 
    

    其中userID分组是PARTITION BY userID提供的,最近的值是通过StartTime降序排序提供的

    Demo

    【讨论】:

      【解决方案2】:

      您所需要的只是聚合:

      SELECT UserID, MAX(StartTime) StartTime, EndTime
      FROM tablename
      GROUP BY UserID;
      

      因为 SQLite 将为每个 UserID 返回最大 StartTime 的行。

      请参阅demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多