Haven't worked with update on duplicate yet, so I'll refer only to part 2
I've worked with subqueries in Oracle but not in mysql, so you can make a first query to get the max(id) and then pass it to second query as id > $max -10. The order by will work.
You can get the 10 most recent records using the time column by ORDER BY timefield desc LIMIT 10.