First rank distinct names ordered by date and then join on the table:
;WITH cte AS(SELECT name, ROW_NUMBER() OVER(ORDER BY MIN(date)) rn
FROM dbo.MyTable
GROUP BY name)
SELECT c.rn, m.date, m.name
FROM cte c
JOIN dbo.MyTable m ON m.name = c.name
ORDER BY m.date