> On 4 Dec 2025, at 20:55, Rich Shepard <[email protected]> wrote:
> 
> I want the script to extract only the maximum `next_contact' date and
> haven't learned how to do this from my reading of web sites.
> 
> The script:
> 
> select p.person_nbr, p.company_nbr, c.next_contact
> from people as p, contacts as c
> where c.next_contact >= '2025-11-01'
> group by p.person_nbr, p.company_nbr, c.next_contact
> order by p.person_nbr, p.company_nbr, max(c.next_contact);
> 
> returns all contacts rather than only the latest one.
> 
> Is using a sub-select the proper way?
> 
> TIA,
> 
> Rich

That looks like a classical case for a correlated subquery with WHERE NOT 
EXISTS.

Something like:

select p.person_nbr, p.company_nbr, c.next_contact
from people as p
join contacts as c
on -- I’m really missing some kind of relation between p and c here, I think 
that’s relevant
where c.next_contact >= ‘2025-11-01’
-- make sure there’s no later contact
and not exists (
        select 1 -- the value is irrelevant, as long as there’s no later 
instance of a contact
        from contacts c2
        where c2.next_contact >= ‘2025-11-01’
        and c2.next_contact > c.next_contact
)

P.S. My mail-client tried to outsmart me in this reply (in no small part) and I 
just got back from the pub, so I can’t exactly guarantee correctness of the 
above, but the principal idea should be solid.

Alban Hertroys
--
There is always an exception to always.






Reply via email to