You should order by and partition by the same list of columns. This way the row number will restart for all unique combinations.
WITH cte AS (
SELECT Id, Person, Date,
row_number() OVER(PARTITION BY Id,Person,Date ORDER BY Id,Person,Date) AS rn
FROM dbo.mytable
)
DELETE cte WHERE rn > 1