+关注继续查看

表结构:
在这里插入图片描述

以下示例是取最大创建时间的订单的name:
  • [ ] 方法1:

使用rank/rownumber/dense_rank函数做排序求出最大最小值,然后子查询查出排序第一的值。三个函数有区别。排序第一的聚合值有多个相同值的时候:rownumber会按照数据出现顺序取第一条值排序1,其他相同值顺延,rank会给相同值的都给出序列1,然后不会顺延序号,序号不连续。dense_rank与rank相同,都会给相同值给出序列1,但是会顺延序号,排序第二的会给出序号2,不同的话可以参考: https://www.cnblogs.com/heyang78/p/12684869.html

SELECT
    SELECT
        order_id,
        `name`,
        create_time,
        ROW_NUMBER() over ( PARTITION BY order_id ORDER BY create_time desc) mm 
        mutil_order 
WHERE
    t.mm =1
  • [ ] 方法2:

使用concat函数将分组字段和聚合字段拼接作为查询条件,但聚合字段有多个相同值的时候会带出多条。 eg:多个最大值

SELECT
    order_id,
    `name`,
    create_time 
    mutil_order 
WHERE
    CONCAT( order_id, create_time ) IN (
    SELECT
        CONCAT(
            order_id,
        MAX( create_time )) 
        mutil_order 
    GROUP BY
        order_id 
    )

有其他好方法可以互相交流呀-。-