MYSQL:用户上次在一段时间内处于活动状态[重复]
Posted
技术标签:
【中文标题】MYSQL:用户上次在一段时间内处于活动状态[重复]【英文标题】:MYSQL: Last time a user was active within a time period [duplicate] 【发布时间】:2019-06-13 19:34:19 【问题描述】:我有一个 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
但这只是随机选择一个条目,而不是最新的。
任何帮助将不胜感激,因为我已经失去了大量的头发。
【问题讨论】:
您是要按 uid 对结果进行分组,还是要为一个 uid 获取单个条目? 这听起来像是greatest-n-per-group 问题。查看带有该标签的其他答案。您可能会问一个已经回答过很多次的问题。 【参考方案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
【讨论】:
非常感谢 GMB。辛苦了。 欢迎@Keith! PS @Keith :由于这个问题被标记为重复,您可能仍然可以查看链接的其他问题,它可能很重要(我的查询还有其他可能的解决方案)以上是关于MYSQL:用户上次在一段时间内处于活动状态[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 和 Android 的给定时间检测用户是不是仅在一台设备上处于活动状态
允许在 UWP 中创建的 PWA 在最小化时不处于非活动状态