作者:真实的独孤一剑 | 来源:互联网 | 2024-09-27 15:39
mysql其实挺好的,大一就开始学,这么多年也还不错,基本上使用数据库一直都是使用的mysql,但是随着使用越来越多,mysql的弊端就开始逐渐显现了。
今天发现,mysql的max()和group by在联合使用的时候,无法查出max()对应的其他列数据,或者说,这些数据都是group by后分组的第一条数据,这真的是麻烦。我能想到的最笨的办法是连一下自己,但是,因为这只是一条子语句,外部还要连表,因此我当即否定了这种想法,认为一定会有更好的解决办法,好吧,呵呵。
之前的vultr账号因为ipv6的原因上不去了,目前只能用百度,百度了这个问题,大部分都是复制的同一个人的答案,不知道这些人怎么想的,转载就转载吧,铺天盖地说自己是原创,得出的解决方案无一例外全是连表。
不敢相信,怎么会这样?肯定有更好的解决办法的,于是我花了一个多小时不断地上网找,自己测试,最终屈服了,mysql的max()方法应该多加参数的,这个参数代表同时查询max()对应的其他列,这样岂不是好多了,为什么要连表?
最终用连表写出来,执行时间接近3秒,好吧,我有空再试试,以下是两种效率极低的解决办法:
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 )