【发布时间】:2022-01-25 13:19:54
【问题描述】:
我有一个 SQL 表,其中一个字段可以在多条记录中具有相同的值。例如:
我想为每个UserID 选择一次EndTime 和UserId。如果有多条记录具有相同的UserID,我想选择最近的记录并覆盖过去的记录。
我正在使用 python 中的Sqlite。
【问题讨论】:
我有一个 SQL 表,其中一个字段可以在多条记录中具有相同的值。例如:
我想为每个UserID 选择一次EndTime 和UserId。如果有多条记录具有相同的UserID,我想选择最近的记录并覆盖过去的记录。
我正在使用 python 中的Sqlite。
【问题讨论】:
可以使用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降序排序提供的
【讨论】:
您所需要的只是聚合:
SELECT UserID, MAX(StartTime) StartTime, EndTime
FROM tablename
GROUP BY UserID;
因为 SQLite 将为每个 UserID 返回最大 StartTime 的行。
请参阅demo。
【讨论】: