Getting an aggregate (here: min) for a group of values
Postgres has distinct on that does just what you are looking for:

select distinct on (id) id, value_a, value_b
from t
order by id, value_b;


SQLFiddle here

You haven't specified what you would like to see when the are multiple values of value_b for an id though.