项目场景:
提示:分组查询之后排序:
项目场景:要取得同一个商品关联下的最新记录
问题描述
提示:直接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 join(
select 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