DISTINCT is really different from DISTINCT ON. And to be honest you sound as if you do not realize that.
DISTINCT is a general SQL feature that all RDBMS have.
DISTINCT ON is a PostgreSQL-only extension. See my examples, and the SELECT manual page that I linked to upthread.
So I still think that the last statement in my example (the statement that reduces your 20-row set to a 13-row set) does what you require. Is that not so?
select
-- this line is the DISTINCT ON clause:
distinct on (key)
-- the select list follows:
key,
source
from yourtable
-- often you'd want an order by clause
-- to control which rows are discarded
-- In this case it does not seem to be important
;
|