In SQL Server :
SELECT meetingId, billid FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY billId ORDER BY meetingID) AS rn, m.* FROM mytable m ) q WHERE rn = 1 OR billid IS NULL
ANSI :
SELECT MIN(meetingId), billid FROM mytable WHERE billid IS NOT NULL GROUP BY billId UNION ALL SELECT meetingId, billId FROM mytable WHERE billid IS NULL
MySQL :
SELECT meetingId, billid FROM mytable WHERE billid IS NOT NULL GROUP BY billId UNION ALL SELECT meetingId, billId FROM mytable WHERE billid IS NULL
This is a trifle more efficient than MIN if you really don't care that meetingID will be returned if it belongs to the right group.
source share