Re: Extract only maximum date from column

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: Extract only maximum date from column
Дата
Msg-id CAKFQuwbzjjBi7YV1gSn=2jX7h-FK8kf8fbpWmpYqX-8pSD7beA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Extract only maximum date from column  (Rich Shepard <rshepard@appl-ecosys.com>)
Ответы Re: Extract only maximum date from column
Список pgsql-general
On Thursday, December 4, 2025, Rich Shepard <rshepard@appl-ecosys.com> wrote:
On Thu, 4 Dec 2025, David G. Johnston wrote:

I would go with a lateral join subquery of the contracts table. Using an
aggregates to perform ranking is an anti-pattern. You want the contract
ranked first when ordered by contract_date. Either use a window function
to explicitly rank the contracts or use a limit/fetch clause to simply
return the first ordered one.

David,

I'm closer, but still missing the proper syntax:

select p.person_nbr, p.company_nbr, c.next_contact
from people as p, contacts as c
join lateral (select max(c.next_contact) as last_contact
     where p.person_nbr = c.person_nbr and
     last_contact >= '2025-11-01'
     )
     c on true;

resulting in:
psql:companies-contacted-2025.sql:9: ERROR:  aggregate functions are not allowed in FROM clause of their own query level
LINE 3: join lateral (select max(c.next_contact) as last_contact

As mentioned, the aggregate max should be avoided - you aren’t doing statistics, you are ranking.

Select person.*, lastcontact.* from person join lateral (select contact.* from contact where contact.person_id=person.person_id  order by last_contact_date desc limit 1) as lastcontact on true;

David J.

В списке pgsql-general по дате отправления: