You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Query Builder中15分钟在线用户筛选SQL逻辑bug排查求助

问题分析与修复方案

核心bug:比较符号完全写反了

你要筛选15分钟内登录的在线用户,逻辑应该是「用户最后登录时间晚于等于当前时间往前推15分钟」,但你写的<是反过来的——它会筛选出15分钟之前就登录过的用户,这就是为什么会返回所有已登录用户的原因。

逐个解答你的疑问:

  • 比较符号错误? 对,这就是根本问题,把<改成>=(或>,看业务是否要包含刚好15分钟前的用户)就解决了。
  • NOW()未获取最新时间戳? 没问题,NOW()会取SQL执行瞬间的当前时间戳,这个用法是对的。
  • '15'字符串格式问题? 也没问题,从语法看你用的是PostgreSQL,它支持INTERVAL '15' MINUTE这种写法,引号不影响功能。

修正后的代码与SQL

修正后的代码片段:

if (Boolean.parse(isOnline)) {
  filterConditions += ` AND u.lastLoginAt >= NOW() - INTERVAL '15' MINUTE`;
}

修正后的完整SQL:

SELECT u.* FROM application.users_tbl u 
WHERE u.role = 'user' 
AND u.lastLoginAt >= NOW() - INTERVAL '15' MINUTE 
ORDER BY u.createdAt DESC;

注:如果业务要求严格排除刚好15分钟前登录的用户,把>=改成>即可。

内容的提问来源于stack exchange,提问作者The Old County

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:34:51