Что ты спрашиваешь не представляется возможным
Если у вас нет метки времени в каждой отдельной таблице, определяя «последние 3 месяца данных» невозможно.
Даже если у вас есть временные метки, просто пытаясь вытащить все строки из всех таблиц, где временная метка находится за последние 3 месяца, может привести к несогласованному состоянию. Например, у вас может быть таблица Customer и таблица Orders. Данному клиенту может быть 5 месяцев, но может быть заказ для этого клиента, которому 1 день. Вытягивая 1-дневный заказ, но не потянув за 5-месячного клиента, ссылки на него приведут к заказу без клиента.
Короче говоря, я не вижу, как вы можете это сделать из базы данных в общем случае. Если у вас довольно простая схема, поделитесь ею. Возможно, есть решение для вашего конкретного случая.
Альтернативный
Если нарезка данные не представляется возможным, и ваше беспокойство количество данных, рассмотрим нарезка данные иным способом. Возможно, потяните данные за 10% ваших клиентов или что-то в этом роде. Если вы разделяете свою схему (если она не слишком сложна), я могу сделать более конкретную рекомендацию.