美文网首页
sql查询中取大值小事一记

sql查询中取大值小事一记

作者: 狂暴发条橙 | 来源:发表于2020-03-10 11:37 被阅读0次

早上要对产品某个功能进行复盘,需要查询在当前所有的付费用户中店铺的商品数量分布情况。因为表设计结构问题,所有订单均显示在同一张表,并且表中没有对应过期时间字段,过期时间字段又维护在了另外一张表,从而导致要联合查询时,需要同时关联三张表进行查询。具体操作比较常规简单,因涉及到业务逻辑表述,暂且跳过。

在查询过程中碰到了一个问题:需要取用户当前最新的一笔订购订单做关联查询。条件反射的马上用起了max函数,内容如下:

select max(add_time) from x where id=小明;

执行结果只出来了小明最新的创建时间,这明显不符合我的要求,因为我还需要其他字段信息。于是,我条件反射的又换一种查询,加入了group by分组函数

SELECT *,max(add_time)from x where owner_id=小明 group by owner_id;

可想而知,这明显又没办法符合查询需求,因为max(add_time)的字段只会并入查询中,从而检索出来的字段并不可用。

我突然有点魔怔,因为这个查询条件我前阵子还经常在用,但是早上就是记不起来,于是我求助了百度、知乎、谷歌,发现往上有很多人也遇到过这个问题,被它所困,有各个论坛均有成千上万关于这方面的问题,答案五花八门,还没验证就已经下班了。于是趁着现在午休的时间,我想了一下,有2个方案,写在这里,一方面练练文笔消磨时间,另一方面也当作记录,方便下次脑子短路的时候可以看到。

#1

方法:简单粗暴,适用数据量较少,单条查询场景

步骤:利用desc获得该条件倒序视图,用limit1获取

selevt * from pdd_user_login_log where owner_id=xxx order by login_time desc limit 1

#2

方法:较为通用的方法,查询速度相比方法1应该会好一点

步骤:利用子查询得到倒序视图,再用group by获取结果

select * from (select * from pdd_user_login_log) where owner_id=xxx order by login_time desc limit 1)a group by a.owner_id

基本方法如上,不过我此刻对group by分组查询的实现原理还是存在很多疑惑不解的地方,等我完全弄明白了再回来更新,拜拜lol

相关文章

网友评论

      本文标题:sql查询中取大值小事一记

      本文链接:https://www.haomeiwen.com/subject/nyxwdhtx.html