我有一个下表。
id name data
1 DAN xxxxxxxxx
2 ANTONY xxxxxxxxx
3 DAN xxxxxxxxx
4 DAN xxxxxxxxx
5 JOSEPH xxxxxxxxx
6 ANTONY xxxxxxxxx
7 JOSEPH xxxxxxxxx
我想首先使用 ID 对表进行排序,然后按名称分组。例如。
7 JOSEPH xxxxxxxxx
5 JOSEPH xxxxxxxxx
6 ANTONY xxxxxxxxx
2 ANTONY xxxxxxxxx
4 DAN xxxxxxxxx
3 DAN xxxxxxxxx
1 DAN xxxxxxxxx
我尝试了各种组合 ORDER BY,也尝试了 ORDER BY FIELD 但无法获得所需的结果
尝试使用
select *, (select max(id) from tab t2 where t2.name = t1.name) m
from tab t1
order by m desc, id desc;
DBfiddle 演示
您还可以使用窗口函数来获取每个名称的最大 id,并将它们用于排序目的。
SELECT *,
MAX(id) OVER(PARTITION BY name ORDER BY id DESC) Ord
FROM table t
ORDER BY Ord DESC
您可以在 order by
中使用子查询,因此您可以将其表示为:
select t.*
from t
order by (select max(id) from t t2 where t2.name = t.name) desc, id desc;