Hola a todos,
Pude darle una solución. La dejo aquí por si alguien más llegara a necesitar obtener información parecida. Lo que hice fue jugar con rownumber y max. Busco el máximo movimiento por cada código y su rownum, luego filtro a todo lo que sea el mismo código y menos e igual al rownum+1. Se puede adaptar para los N últimos movimientos de cada código.
Código SQL:
Ver originalSELECT CODIGO, MOVIMIENTO
FROM (SELECT CODIGO, MOVIMIENTO, ROWNUM ROWNUMA
FROM (SELECT DISTINCT CODIGO, MOVIMIENTO
FROM TABLA
GROUP BY CODIGO, MOVIMIENTO
ORDER BY CODIGO ASC, MOVIMIENTO DESC)) X
WHERE EXISTS (SELECT 1
FROM (SELECT B.CODIGO, A.MOVIMIENTO, ROWNUME + 1 ROWNUME
FROM (SELECT CODIGO, MOVIMIENTO, ROWNUM ROWNUME
FROM (SELECT DISTINCT CODIGO, MOVIMIENTO
FROM TABLA
GROUP BY CODIGO, MOVIMIENTO
ORDER BY CODIGO ASC, MOVIMIENTO DESC)) A
INNER JOIN (SELECT CODIGO, MAX(MOVIMIENTO) MOVIMIENTO
FROM TABLA
GROUP BY CODIGO) B
ON A.CODIGO = B.CODIGO
AND A.MOVIMIENTO = B.MOVIMIENTO) Y
WHERE X.CODIGO = Y.CODIGO
AND X.ROWNUMA <= Y.ROWNUME);