SQL 语句 Return 记录有两个以上的实例并省略最后一个实例

SQL Statement to Return Records with More than Two Instances and Omit the Last Instance

我希望编写一个 SQL 语句,该语句将提取具有两个或更多实例的 EventID,但会忽略这些记录的最后一个实例。这看起来很疯狂,但这样做的目的是查看具有多次更新的事件(更新与 TIME_OF_EVENT 列相关,每次 crew/person 更新事件时,更新的时间得到存储在这里)并查看哪些已在中间过期。我通过比较 TIME_OF_EVENT 和 PREV_ERT.

来查看它们是否在中间过期
select *
from ert_change_log
where time_of_event > '30-SEP-21 23:59:59'
and source <> 'I'

上面的SQL生成下图。这只是 table 的参考,以提供满足此条件的 EventID 示例。

在一个完美的世界中,我需要的查询只会 return EventIDs 210043901 和 210044021 并且会忽略这些 EventID 的最新 TIME_OF_EVENT。

如果这令人困惑,我很乐意提供更多解释或说明!

感谢任何意见。

您可以使用ROW_NUMBER解析函数:

SELECT *
FROM   (
  SELECT e.*,
         ROW_NUMBER() OVER (PARTITION BY event_id ORDER BY time_of_event DESC) AS rn
  FROM   ert_change_log e
  WHERE  time_of_event >= DATE '2021-10-01'
  AND    source <> 'I'
)
WHERE  rn > 1;