小编典典

从datetime x min ago和datetime x min ago之间的mysql表中选择

sql

我想我在标题中总结得很好。我想选择一个特定时间到另一个特定时间的在线用户。我的桌子看起来像这样:

CREATE TABLE online (

    id bigint(20) NOT NULL auto_increment,
    `username` varchar (16) NOT NULL, 
    `ip` varchar(39) NOT NULL default '',   
    `time` datetime NOT NULL default '0000-00-00 00:00:00' ,

      PRIMARY KEY  (id)
);

我想要一个查询,该查询返回username在线的last 15 minutes

并查询已经在线的用户last 60 minutes, but not the last 15 minutes。因此查询不会返回相同的值。我不知道该怎么办。


阅读 194

收藏
2021-04-15

共1个答案

小编典典

对于您的第一个查询:

SELECT username
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE

第二点:

SELECT username
FROM online
WHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE

这两个查询均假设每个用户在联机表中仅出现一次(如果确实如此,则应添加UNIQUE约束以强制执行此操作)。

如果用户名可以在表中多次出现,则只需要在SELECT之后为第一个查询添加DISTINCT,但是对于第二个查询,您需要使用略有不同的方法:

SELECT DISTINCT username
FROM online
WHERE time > NOW() - INTERVAL 60 MINUTE
AND NOT EXISTS
(
    SELECT *
    FROM online
    WHERE time > NOW() - INTERVAL 15 MINUTE
)
2021-04-15