Bạn có thể tiếp cận điều này bằng cách sử dụng row_number()
:
select key, val
from (select t.*, row_number() over (partition by key order by num desc) as seqnum
from table_name t
) t
where seqnum = 1;
Bạn có coi điều này là "tao nhã" hơn hay không có lẽ là do sở thích.
Tôi nên chỉ ra rằng điều này hoàn toàn khác với truy vấn của bạn. Điều này được đảm bảo trả về một hàng cho mỗi key
; của bạn có thể trả về nhiều hàng. Nếu bạn muốn hành vi đó, chỉ cần sử dụng rank()
hoặc dense_rank()
thay vì row_number()
.