让我们假设我有一个表,看起来像这样:
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
事件的任何记录,对于这些记录,我们找不到B
或C
事件记录,该记录在A
记录之前或之后的1秒或更短的时间内。