I think something like this is what you need:
Select ID, Name, Location,
MIN(Date) over(order by date partition by id, name
reset when Location <> min(location)
over(order by date partition by id, name rows between 1 preceding and 1 preceding) )
Note that RESET WHEN is specific to Teradata. Perhaps not used very often, but can be really handy when you need it.
sorry - dup answer, was still shown in the unanswerd questionlist...)
code is not tested as you didn't provide test data in an SQL form (e.g. table DDL and inserts)
As I understand you want to filter the rows where the location is different from the previous one.
I would use an OLAP funtion
qualify location <> max(location) over (partiton by id, name order by date rows between 1 preceding and 1 preceding)
or max(location) over (partiton by id, name order by date rows between 1 preceding and 1 preceding) is null;