表结构:
以下示例是取最大创建时间的订单的name:
- [ ] 方法1:
使用rank/rownumber/dense_rank函数做排序求出最大最小值,然后子查询查出排序第一的值。三个函数有区别。排序第一的聚合值有多个相同值的时候:rownumber会按照数据出现顺序取第一条值排序1,其他相同值顺延,rank会给相同值的都给出序列1,然后不会顺延序号,序号不连续。dense_rank与rank相同,都会给相同值给出序列1,但是会顺延序号,排序第二的会给出序号2,不同的话可以参考:https://www.cnblogs.com/heyang78/p/12684869.html
SELECT
*
FROM
(
SELECT
order_id,
`name`,
create_time,
ROW_NUMBER() over ( PARTITION BY order_id ORDER BY create_time desc) mm
FROM
mutil_order
) t
WHERE
t.mm =1
- [ ] 方法2:
使用concat函数将分组字段和聚合字段拼接作为查询条件,但聚合字段有多个相同值的时候会带出多条。eg:多个最大值
SELECT
order_id,
`name`,
create_time
FROM
mutil_order
WHERE
CONCAT( order_id, create_time ) IN (
SELECT
CONCAT(
order_id,
MAX( create_time ))
FROM
mutil_order
GROUP BY
order_id
)
有其他好方法可以互相交流呀-。-