提问者:小点点

MYSQL:上次用户在某个时间段内处于活动状态[重复]


我让一个JS将日志发送回PHP页面,以以下格式将条目插入MYSQL数据库:

id      ipad       uid  ts                  urlpath  
1455    1.1.1.15    13  19/01/2019 07:32    http://1.1.1.151/useradmin.php  
1456    1.1.1.15    13  19/01/2019 07:33    http://1.1.1.151/useradmin.php  
1460    1.1.1.15    13  19/01/2019 07:37    http://1.1.1.151/useradmin.php  
1461    1.1.1.15    19  19/01/2019 08:05    http://1.1.1.151/index.php  
1462    1.1.1.15    19  19/01/2019 08:05    http://1.1.1.151/index.php  
1463    1.1.1.15    19  19/01/2019 08:05    http://1.1.1.151/index.php  
1464    1.1.1.15    13  19/01/2019 23:13    http://1.1.1.151/useradmin.php 

我想做的是在给定的时间(例如30分钟,6小时,30天等)内返回uid的最新SINGLE条目,但它永远不会返回最新条目。我目前使用的代码是:

SELECT *  
  FROM usertrack  
 WHERE ts >= NOW() - INTERVAL 43830 MINUTE  
 GROUP 
    BY uid  
HAVING MAX(ts)  
 ORDER 
    BY ts DESC 

但这只是随机选择一个条目,而不是最新的。

任何帮助都将不胜感激,因为我已经失去了大量的头发。


共1个答案

匿名用户

这可以通过相关子查询来完成,例如:

SELECT u.*
FROM usertrack u
WHERE NOT EXISTS (
    SELECT 1 FROM usertrack u1 WHERE u1.ts > u.ts AND u1.uid = u.uid
) AND ts >= NOW() - INTERVAL 43830 MINUTE