【Group By 和 Order By 同时使用】

项目场景:

提示:分组查询之后排序:

项目场景:要取得同一个商品关联下的最新记录


问题描述

提示:直接group by productCode 之后 接着order by update_time:

select XXX
from table1 t1 inner join tabel2 t1
on t1.id = t2.id
where ...
group by t1.productCode
order by t1.update_time

原因分析:

提示:mysql高版本语法上不会报 group by 字段和 order by 字段不一致的错误 :

但是确实存在的问题是 group by 分组后只会取第一组,但是我们不确定第一组是不是最新的更新时间,这样取出来的值肯定是有问题的。
想法

  • 先排序之后取到最新更新日期之后,这样之后在分组取得第一条就是最新的更新时间 --测试环境可行,本地居然不行
  • 分组之后取最大的,这种不能直接使用聚合函数Max() MAX函数只会取列的最大行,不会取到整行的最大值,所以使用下面方案二的解决办法。

解决方案:

方案一

select XXX
from table1 t1 inner joinselect XXX from table2 t2
		where xx
		order by t2.update_time DESC 
)t1.id = t2.id 
where XX
group by t1.productCode 

方案二

select XXX
from table1 t1 inner join table2 t2 
on t1.id = t2.id where 1 >select COUNT(*)
		from table1 tt1 inner join table2 tt2 
		on tt1.id = tt2.id 
		where XXX
		and t1.productCode = tt1.productCode  ##这一步可以想想是为什么order by t1.update_time
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值