Вангую, что у него январь имеет индекс 0

Или что-то близкое к оному.
"Ахренеть, дайте два!" (с)

В итоге получается так, что ты каждый раз делаешь полную выборку данных в БД, но из нее только часть, отсеянную лимитом и оффсетом, передаешь в ПХП? И всё это в цикле??? Ну так и нахрена так нагружать БД?
Тут как минимум 2 вариант можно предложить.
1. Выборку сливать в файл, к которому уже обращаться из ПХП.
Если это невозможно в силу каких-то причин, то тогда п.2:
2. Слить выборку во временную таблицу. Из нее уже выбирать в цикле. Но без оффсетов!!! Только с лимитом и началом выборки по условию в WHERE - мы же знаем, какая последняя запись была в предыдущей выборке (да, надо будет не забыть создать индекс для временной таблицы). И выборка будет простейшая, на уровне "SELECT * FROM ...", что также ускорит процесс.
Пусть здесь и в цикле будет запрос, но каждый запрос будет намного "легче".
У меня есть подозрение, что его "PDO.... fetchAll" хочет сначала вытащить всё в ПХП, а потом только работать с данными.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)