По разному можно поизвращаться. Например,
select /**/ from tablename join (
select id_client, max(next_talk_date) as last_date from tablename where id_client in (/**/) group by id_client
) lastdate using(id_client)
where id_client in (/**/) and next_talk_date >= CURRENT_DATE and (next_talk_date = last_date or next_talk_date > CURRENT_DATE)
По индексу id_client & next_talk_date должен бегать внятно.
Или так:
select /**/ from tablename t
where id_client in (/**/) and (
next_talk_date > CURRENT_DATE or not exists (
select 1 from tablename n
where n.id_client = t.id_client and n.next_talk_date > t.next_talk_date
)
)