Вам не нужно RANK()
для вашего конкретного запроса. Вы можете переписать его следующим образом:
SELECT *
FROM TEST_PORTIN t1
WHERE PORT_IN_DATE > '2012-01-16 23:20:27'
AND NOT EXISTS (
SELECT *
FROM TEST_PORTIN t2
WHERE t1.MSISDN = t2.MSISDN -- PARTITION BY clause translation
AND t1.PORT_IN_DATE > t2.PORT_IN_DATE -- ORDER BY clause translation
)
ORDER BY PORT_IN_DATE
Или, немного более изящно (но не обязательно быстрее), используя количественный предикат сравнения
SELECT *
FROM TEST_PORTIN t1
WHERE PORT_IN_DATE > '2012-01-16 23:20:27'
AND PORT_IN_DATE >= ALL (
SELECT PORT_IN_DATE
FROM TEST_PORTIN t2
WHERE t1.MSISDN = t2.MSISDN
)
ORDER BY PORT_IN_DATE