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

如何不使用窗口函数获取每个用户的首次与末次登录时间戳

获取用户首次/末次登录时间的最优SQL方案

需求说明

从记录用户登录时间戳的logins表中,获取每个用户的首次登录(first_login)和末次登录(last_login)时间戳,禁止使用OVER (PARTITION BY)窗口函数。

表结构

user_idlogin_timestamp
12024-11-01 08:30:00
12024-11-02 09:15:00
12024-11-03 07:45:00
22024-11-01 12:20:00
22024-11-02 08:50:00

期望结果

user_idfirst_loginlast_login
12024-11-01 08:30:002024-11-03 07:45:00
22024-11-01 12:20:002024-11-02 08:50:00

你的查询方案验证

你给出的GROUP BY结合MIN/MAX的查询写法完全可行,且是当前限制条件下的最优方案:

SELECT user_id, MIN(login_timestamp) AS first_login, MAX(login_timestamp) AS last_login
FROM logins
GROUP BY 1

方案优势与优化建议

  • 逻辑简洁高效:通过GROUP BY user_id聚合用户数据,MIN()和MAX()函数直接提取时间字段的极值,完全匹配需求,代码可读性强
  • 性能最优:数据库对这类聚合查询的优化非常成熟,若在logins表上创建联合索引(user_id, login_timestamp),查询会直接通过索引扫描获取结果,无需全表遍历,性能大幅提升
  • 符合限制:全程未使用窗口函数,满足要求

索引优化建议

如果表数据量较大,建议创建以下联合索引:

CREATE INDEX idx_logins_user_ts ON logins(user_id, login_timestamp);

内容的提问来源于stack exchange,提问作者walkingbas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:20