mysql的组内排序(取出最大,最小的一条记录)这样的需求在工作中非常常见,到网上查找,有好多种解决办法,我经过多种比较测试,认为先排序、后分组的做法是最有效的,也是最容易理解的。
模拟一个稍微复杂点的例子来简单讲述这个过程。
查找用户的首单记录(包含用户注册日期,首单时间,首单商品)
users表:userid,registerdate
orders表:orderid,userid,orderdate,goodscode
那么sql应该如此写:
select * from (
select t1.userid,t1.registerdate,t2.orderid,t2.orderdate,t2.goodscode
from users t1
left join orders t2 on t1.userid = t2.userid
order by t2.orderdate
) t
group by t.userid
order by t.registerdate
上述的语句有几点需要说清:
1,此语句在oracle中是不行的,在mysql中,select的字段可以超出group设定的范围,这个是mysql的便捷之处,但是不是标准sql。
2,内层是排序,外层是分组,一旦内层排好序了后,外层的分组保证拿到的是按照排序好的次序,绝对不会混乱。