17,089
社区成员
发帖
与我相关
我的任务
分享
WITH T AS
(SELECT 1 ID, 1 NUM, 1 FLAG FROM DUAL UNION ALL
SELECT 1 ID, 2 NUM, 2 FLAG FROM DUAL UNION ALL
SELECT 1 ID, 3 NUM, 3 FLAG FROM DUAL UNION ALL
SELECT 2 ID, 1 NUM, 1 FLAG FROM DUAL UNION ALL
SELECT 3 ID, 1 NUM, 1 FLAG FROM DUAL UNION ALL
SELECT 3 ID, 2 NUM, 2 FLAG FROM DUAL UNION ALL
SELECT 4 ID, 1 NUM, 1 FLAG FROM DUAL UNION ALL
SELECT 4 ID, 2 NUM, 3 FLAG FROM DUAL UNION ALL
SELECT 6 ID, 1 NUM, 1 FLAG FROM DUAL)
SELECT ID, NUM, FLAG
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY NUM DESC) RN, T.*
FROM T)
WHERE RN = 1
with t as
(select 1 id, 1 num, 1 flag
from dual
union all
select 1 id, 2 num, 2 flag
from dual
union all
select 1 id, 3 num, 3 flag
from dual
union all
select 2 id, 1 num, 1 flag
from dual
union all
select 3 id, 1 num, 1 flag
from dual
union all
select 3 id, 2 num, 2 flag
from dual
union all
select 4 id, 1 num, 1 flag
from dual
union all
select 4 id, 2 num, 3 flag
from dual
union all
select 6 id, 1 num, 1 flag from dual)
select t1.*, t2.flag
from (select id, max(num) num from t group by id) t1, t t2
where t1.id = t2.id
and t1.num = t2.num
order by t1.id;