row_number() over(partition by col1 order by col2) 根据COL1分组可能会有多个组,每组组内根据COL2进行排序。每组内都有自动生成的序号,从1开始,有多少个分组就有多少个从1开始的序号
SELECT
ROW_NUMBER() OVER(PARTITION BY table.XX ORDER BY age DESC) rn, table .*
FROM table
WHERE condition = ''
上面是分组后组内所有条数都显示,组内按从大到小排序
下面是每组只显示一条数据,是各组中最大的,但是不能把所有信息都显示,只能显示max和group by 的字段
select
max(age), table.XX
from table
where condition = '' group by table.XX
显示所有字段,将上面的sql去掉group by分组并外面加一层查询。这个方法没有使用row_number()的效率高,因为包含了两次查询操作
select * from table
where age=(
select
max(age), table.XX
from table
where condition = '' group by table.XX
)