博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL group by的困惑
阅读量:4199 次
发布时间:2019-05-26

本文共 1253 字,大约阅读时间需要 4 分钟。

今天为写一条SQL困扰了很久

首先先贴两条sql,大家看看有啥区别

select * from all_txt A where id=(SELECT id from all_txt  
where A.key_value = key_value ORDER BY release_time DESC limit 1);
select * from (select *,max(release_time) as timea 
from all_txt group by key_value order by release_time desc) a order by timea desc;

然后说明下表的重要字段为三个id,key_value,release_time

作用是取每个相同key_value中release_time最新的数据

所有的数据为

id  key_value release_time1    001    2007-11-012    001    2007-11-023    001    2007-11-034    002    2007-11-045    002    2007-11-056    003    2007-11-067    004    2007-11-078    004    2007-11-089    005    2007-11-0910   005    2007-11-10
现在要的结果为
id  key_value release_time3    001    2007-11-035    002    2007-11-056    003    2007-11-068    004    2007-11-0810   005    2007-11-10
针对这些数据,显示貌似都一样
但仔细研究下来就会发现
第二句 返回的会是
id  key_value timea     release_time3    001    2007-11-03  2007-11-015    002    2007-11-05  2007-11-046    003    2007-11-06  2007-11-068    004    2007-11-08  2007-11-0710   005    2007-11-10  2007-11-09

用max求出来的数据timea是没错,是上面的release_time,但真实的release_time却是不一样的,那证明取的数据不是最新的那条的,而是给我感觉取的是物理位置上的第一条,这样的话如果你还需要这张表的其他字段就会有问题。

说了半天有人会说,那你就用第一种吧,执行下你就会发现,性能太差了,而第二种就很快,本以为能用第二种的,哎~~~~可能是对group by的本质还是了解不是很透彻
大家有啥更好的优化意见或方法,可以给我留言或加入qq群:47833489 讨论

转载地址:http://mxbli.baihongyu.com/

你可能感兴趣的文章
Hbase centos下单机安装
查看>>
weblogic单机安装(centos/linux)
查看>>
Tomcat单机安装(centos/linux)
查看>>
SpringCloud分布式开发五大神兽
查看>>
Tableau 10.3 简单Dashboard创建
查看>>
IBM Cognos 11 简单Dashboard创建
查看>>
随想 110715
查看>>
Service
查看>>
构筑全栈式安全体系
查看>>
金橙子激光打标机的二次开发(C#)
查看>>
(坑集)virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not
查看>>
如何使用软碟通制作启动U盘
查看>>
Ubuntu16.04安装Python3.6
查看>>
Ubuntu apt-get和pip源更换以及apt update和upgrade 的区别
查看>>
关于GIT,你只需要看这篇文章。
查看>>
MySQL数据库之基础备份
查看>>
http协议之常用状态码总结
查看>>
python中的四个BIF:filter()、map()、zip()、enumerate()
查看>>
python 变量作用域、闭包、装饰器
查看>>
python中的浅拷贝,深拷贝的区别和理解
查看>>