Сначала попробуйте сами: на собеседовании подсказки не будет.
Два условия на клиента, и оба удобнее всего выразить через EXISTS, а не через JOIN: соединения размножили бы строки клиента по числу счетов и транзакций, и сумму пришлось бы чинить DISTINCT.
Первое условие вложенное: найти счёт клиента, открытый до 15 июня 2024, у которого есть транзакция в июне 2025. Второе условие считает сумму по всем счетам клиента за окно с 15 мая по 15 июня через коррелированный подзапрос; coalesce(..., 0) обязателен, иначе у клиента без транзакций за месяц сумма будет NULL, сравнение с 5000 даст NULL, и клиент выпадет, хотя по смыслу он подходит.
Границы периодов пишите явно и полуоткрыто: >= '2025-06-01' AND < '2025-07-01'. Так не промахнётесь на 30 июня и не зависите от типа колонки.
SELECT c.name FROM client c WHERE EXISTS (SELECT 1 FROM account a WHERE a.client_id = c.id AND a.open_dt < DATE '2024-06-15' AND EXISTS (SELECT 1 FROM transaction t WHERE t.account_id = a.id AND t.transaction_date >= DATE '2025-06-01' AND t.transaction_date < DATE '2025-07-01')) AND coalesce((SELECT sum(t.amount) FROM transaction t JOIN account a ON a.id = t.account_id WHERE a.client_id = c.id AND t.transaction_date >= DATE '2025-05-15' AND t.transaction_date <= DATE '2025-06-15'), 0) < 5000