> I thought you said (p.person_nbr, c.contact_date) is already unique?
Yes, that's the PK for the contacts table. I'm still unsure what needs to be explicitly included in a query. Quite often I leave out a column and postgres tells me it needs to be included in order by or group by.
Well, in this case I suspect you had made a different mistake which caused the error message (probably the max(c.next_contact)) but instead of solving the original problem (removing the max(...)) you decided that two wrongs (adding or extending a group by) would hopefully make a right (which it did, technically). But while the query works it is definitely not conceptually correct.