Delete records with multiple values for a column
not sure about count(distinct Rate) > 1, think distinct is not necessary (but this depends from Your logic and not change query)

WITH tmp AS 
        (select 
                ID,
                MAX(Rate) AS Rate,
                MAX(City) AS City
        from t
        group by ID
        having count(distinct Rate) &gt; 1)


select x.* 
from t as x
LEFT JOIN tmp ON x.ID = tmp.ID AND x.Rate = tmp.Rate
WHERE tmp.ID IS NOT NULL


must return expected data

LEFT JOIN tmp ON x.ID = tmp.ID AND x.Rate = tmp.Rate
    WHERE tmp.ID IS NOT NULL


could be changed by INNER JOIN

INNER JOIN tmp ON x.ID = tmp.ID AND x.Rate = tmp.Rate


add final form as asked (delete all not), edited:
original query was have 

having count(distinct Rate) &gt; 1


as described in question - correct form of expected query, after comment - we need just remove it

WITH tmp AS 
        (select 
                ID,
                MAX(Rate) AS Rate,
                MAX(City) AS City
        from t
        group by ID
        )


DELETE x
from t as x
LEFT JOIN tmp ON x.ID = tmp.ID AND x.Rate = tmp.Rate
WHERE tmp.ID IS NULL