DROP SCHEMA tmp CASCADE; CREATE SCHEMA tmp ; SET search_path=tmp; CREATE TABLE massage ( zurl varchar NOT NULL , zemail varchar NOT NULL , contacted boolean ); INSERT into massage(zurl, zemail, contacted) VALUES ( 'foo', ' foo@example.com ', False) ,( 'bar', ' bar@example.com ', False) ,( 'baz', ' foo@example.com ', True) ; SELECT DISTINCT zemail AS zemail , MIN(zurl) AS zurl FROM massage m WHERE NOT EXISTS ( SELECT * FROM massage nx WHERE nx.zemail = m.zemail AND nx.contacted = True ) GROUP BY zemail;
If there are several entries for a given email address, then the above selects the one that has the βlowestβ URL. If you want them all, the query will be even simpler:
SELECT m.zurl, m.zemail FROM massage m WHERE NOT EXISTS ( SELECT * FROM massage nx WHERE nx.zemail = m.zemail AND nx.contacted = True ) ;
source share