SQL: Filter type A事件发生后1秒内没有type B事件发生的行

  • 本文关键字:事件 type 1秒 Filter SQL sql sql-server t-sql
  • 更新时间 :
  • 英文 :


让我们假设我有一个表,看起来像这样:

timestamp                    event       
2021-06-01 12:00:00.000      A          
2021-06-01 12:00:00.200      B          
2021-06-01 12:00:00.500      C          
2021-06-01 12:00:01.700      A
2021-06-01 12:00:02.000      D
2021-06-01 12:00:03.000      B           

我想选择事件B和事件C在事件A的1秒内没有发生的所有事件A的时间戳。

那么从上面的例子中,时间戳20121-06-01 12:00:01.700将被返回。

最好在SQL Server中,但任何SQL语法都可以帮助我弄清楚如何编写这样的查询。

我们可以在这里使用exists逻辑:

SELECT timestamp, event
FROM yourTable t1
WHERE event = 'A' AND
NOT EXISTS (
SELECT 1
FROM yourTable t2
WHERE ABS(DATEDIFF(ms, t2.timestamp, t1.timestamp)) <= 1000 AND
t2.event IN ('B', 'C')
);

演示用简单的英语读,上面的查询说返回A事件的任何记录,对于这些记录,我们找不到BC事件记录,该记录在A记录之前或之后的1秒或更短的时间内。

相关内容

  • 没有找到相关文章

最新更新