对mysql的小小吐槽

mysql其实挺好的,大一就开始学,这么多年也还不错,基本上使用数据库一直都是使用的mysql,可是随着使用愈来愈多,mysql的弊端就开始逐渐显现了。mysql

今天发现,mysql的max()和group by在联合使用的时候,没法查出max()对应的其余列数据,或者说,这些数据都是group by后分组的第一条数据,这真的是麻烦。我能想到的最笨的办法是连一下本身,可是,由于这只是一条子语句,外部还要连表,所以我立即否认了这种想法,认为必定会有更好的解决办法,好吧,呵呵。sql

以前的vultr帐号由于ipv6的缘由上不去了,目前只能用百度,百度了这个问题,大部分都是复制的同一我的的答案,不知道这些人怎么想的,转载就转载吧,铺天盖地说本身是原创,得出的解决方案无一例外全是连表。数据库

不敢相信,怎么会这样?确定有更好的解决办法的,因而我花了一个多小时不断地上网找,本身测试,最终屈服了,mysql的max()方法应该多加参数的,这个参数表明同时查询max()对应的其余列,这样岂不是好多了,为何要连表?测试

最终用连表写出来,执行时间接近3秒,好吧,我有空再试试,如下是两种效率极低的解决办法:ip

select * from (SELECT ANY_VALUE(A.num) num,ANY_VALUE(A.close) ma,ANY_VALUE(A.data) ma_time FROM `fa_pvg` A,
(SELECT ANY_VALUE(num) num,MAX(close) max_day FROM `fa_pvg` where data BETWEEN 20180625  AND  20180705 GROUP BY num) B
WHERE A.num = B.num AND A.close = B.max_day GROUP BY A.num)a left join (SELECT ANY_VALUE(A.num) num,ANY_VALUE(A.close) mi,ANY_VALUE(A.data) mi_time FROM `fa_pvg` A,
(SELECT ANY_VALUE(num) num,MIN(close) max_day FROM `fa_pvg` where data BETWEEN 20180625  AND  20180705 GROUP BY num) B
WHERE A.num = B.num AND A.close = B.max_day GROUP BY A.num)b ON a.num=b.num效率

select num,close,data from fa_pvg where concat(num,close) in (select concat(num,max(close)) from fa_pvg t1  where data BETWEEN 20180625  AND  20180705  group by t1.num ) 百度