Я думаю об этом как:
SELECT name, ARRAY_AGG(month ORDER BY month DESC)
FROM (SELECT c.*,
MAX(c.month) FILTER (c.status = 1) OVER (PARTITION BY c.name) as last_1_month
FROM children c
) c
WHERE month > last_1_month
GROUP BY name;
Эта логика просто получает последний месяц, где status = 1
, а затем выбирает все последующие месяцы.
Если месяц фактически последовательный без пробелов, вы можете сделать:
SELECT name,
ARRAY_AGG(month ORDER BY month DESC)[1:MAX(month) - MAX(month) FILTER (c.status = 1)]
FROM children c
GROUP BY name;