单表分类取最值的SQL如何实现效率最高?

发布于 2022-08-30 16:20:13 字数 222 浏览 16 评论 0

现有实际需求如下:表TBL(userid,logintime,dat),userid为用户名(KEY),logintime为登录时间,dat为某些数据,请写SQL语句返回每个有记录的用户在最后一次登录所产生的userid,dat结果集。

这个问题其实是一个广谱性的问题,在很多场景下会遇到。那么对于这类单表分类(userid相同的视为一类)取最值(或者是最大两个或三个值)的问题,如何设计SQL才能使效率最高?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

み青杉依旧 2022-09-06 16:20:13

@sub 同学先排序再 group by 的方法是可以的,这里再写一种效率更高的方法。当然对 logintime 建立索引是非常可取的一点。

select userid,dat from tbl t where t.logintime = (select max(logintime) from tbl where userid = t.userid)

参考:分组计算的SQL设计探讨

孤千羽 2022-09-06 16:20:13

取值一定会用到order by 的,那么在order by 的字段(logintime)最后登录时间需要建一个索引,这样可以提高排序效率。

拔了角的鹿 2022-09-06 16:20:13

对logintime和userid都创建索引呢, 哪个效率会更高一些

辞别 2022-09-06 16:20:13

如果取最值是经常使用的操作,那么在更新数据和插入数据的时候,额外的维护一个最小值或者最大值集合就好了~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文