Sql:选择时间差很小的行

use*_*954 1 sql postgresql

我有一张桌子

event_id eventtypeid eventtimestamp

它描述了可以彼此接近的时间事件。我想找到事件类型相同且时间戳之间的差异不超过 3 毫秒的事件对。

在sql中一般可以吗?我该如何提出这样的要求?

先感谢您。

Pat*_*ick 5

像这样的查询通常最好使用窗口函数来解决:

SELECT eventtypeid, first, second, diff
FROM (
  SELECT eventtypeid, event_id AS first, lead(event_id) OVER w AS second,
         lead(eventtimestamp) OVER w - eventtimestamp AS diff
  FROM event_table
  WINDOW w AS (PARTITION BY eventtypeid ORDER BY eventtimestamp)
) sub
WHERE diff <= interval '3 milliseconds';
Run Code Online (Sandbox Code Playgroud)

这通常比自连接快得多。