0

考虑如下表:

CREATE TABLE records (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    eventOccured DATETIME NOT NULL,
    eventType INT NOT NULL,
    eventDescription VARCHAR(32)
)

我想从整个表中检索eventOccuredandeventType字段,但如果两个或多个事件在一小时内发生,那么我只想要其中的第一个。如果从 N:00 到 N:59 的所有事件都被认为是同一小时,这将很简单,但在这种情况下,事件类型为“5”的 12:15 的事件将被认为在 11 点后不到一小时内发生: 45 eventType "5",因此不应返回。这可以在没有存储过程的情况下在 MySQL 中完成吗?我可以编写这样的程序,但我担心它会占用大量资源,我很想了解 MySQL 是否具有这种开箱即用的能力。

4

1 回答 1

1

你的意思是你想要所有事件,在接下来的 60 分钟内没有其他事件。此查询以对 mysql 友好的方式执行此操作:

select *
from records r
where not exists (select 1
                  from records r2
                  where r2.eventOccured > r.eventOccured and
                        timestampdiff(minute, r.eventOccured, r2.eventOccured) < 60
                 ) 
于 2012-08-21T20:54:49.977 回答