MYSQL:上一次用户在一段时间内处于活动状态

时间:2019-01-20 00:29:01

标签: mysql greatest-n-per-group

我有一个JS将日志发送回PHP页面,以便以以下格式将条目插入MYSQL DB:

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天等)按时间戳(ts)返回uid的最新SINGLE条目 我已经尝试了几段代码,但从未返回最新条目。我目前使用的代码是:

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

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

任何帮助将不胜感激,因为我已经失去了很多头发。

1 个答案:

答案 0 :(得分:0)

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

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