Sql:选择时间差很小的行

标签 sql postgresql

我有一张 table

event_id eventtypeid eventtimestamp

描述的是可以相互接近的时间事件。我想找到事件对,其中事件类型相等并且时间戳之间的差异不超过 3 毫秒。

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

提前谢谢你。

最佳答案

像这样的查询通常最好用 window function 来解决。 :

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';

这通常比自连接快得多。

关于Sql:选择时间差很小的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844662/

相关文章:

sql - 如果数据保持不变,有没有办法为同一个 SQL 查询获得不同的结果?

sql - 安装 SQL Server Express 2005 - 但它已经存在于机器上

django - Postgres : Password authentication failed for user "user". 角色 "user"不存在

performance - Postgres函数优化

sql - PostgreSQL - 将数值从 jsonb 字段复制到整数列

postgresql - 在 Heroku 上与 Go + Postgres 的连接被拒绝

sql - 如何从数据库中删除所有内容(表、 View 、存储过程、函数)?

mysql - SQL Count 使用 WHERE 子句连接表

postgresql - 在 SELECT 中为字符类型保留空格

mysql - 加入后在数据库中填充以下日期的值