项目场景:
比如一个表有a,b,time,d,e五个字段,根据a,b字段分组,time字段倒序,然后取排序后每组数据第一条数据的de俩字段
解决方案:
SELECT
t2.*
FROM
(
SELECT
a,
b,
max(time) time
FROM
test_table
GROUP BY
a,
b
ORDER BY
time
) t1
JOIN
test_table t2
ON t1.a = t2.a
AND t1.b = t2.b
AND t1.time = t2.time;
整体的步骤:
- 先把group by 的那些字段,加上一个max(时间)查出来,这些可以确定唯一的一条数据,把这个结果作为t1表。
- 然后再跟原表关联,把这些数据相关的所有字段查出来。
max函数说明:后边使用聚合函数时,max会取其中的最大值填充上去。