you could use ranking_functions by partitioning through supplier_id
WITH cte
AS (SELECT *,
Row_number()
OVER(
partition BY supplier
ORDER BY creation_date DESC) AS rn
FROM table)
SELECT *
FROM cte
WHERE rn <= 3