单表分类取最值的SQL如何实现效率最高?
现有实际需求如下:表TBL(userid,logintime,dat),userid为用户名(KEY),logintime为登录时间,dat为某些数据,请写SQL语句返回每个有记录的用户在最后一次登录所产生的userid,dat结果集。
这个问题其实是一个广谱性的问题,在很多场景下会遇到。那么对于这类单表分类(userid相同的视为一类)取最值(或者是最大两个或三个值)的问题,如何设计SQL才能使效率最高?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
@sub 同学先排序再
group by
的方法是可以的,这里再写一种效率更高的方法。当然对logintime
建立索引是非常可取的一点。参考:分组计算的SQL设计探讨
取值一定会用到order by 的,那么在order by 的字段(logintime)最后登录时间需要建一个索引,这样可以提高排序效率。
对logintime和userid都创建索引呢, 哪个效率会更高一些
如果取最值是经常使用的操作,那么在更新数据和插入数据的时候,额外的维护一个最小值或者最大值集合就好了~