я думаю сначала нужно найти минимальный и максимальный timestamp даты, затем попробовать бинарным поиском отсекать куски, запоминая последний курсор. с каждым отсечением следить за тем, чтобы мы не проскочили искомый период таймстемпов - если мы ищем 18 число, а предыдущий курсор был на 19 числе, а на текущем курсоре мы стоим на 17 числе - то период за 18 число проскочен, и берем тогда этот интервал, и продолжаем уже в нем бинарный поиск.
когда курсор будет на 18 числе в моем примере, начинаем идти от него вниз и вверх циклом for(..;..;..), пока не упремся в границы интервала с обоих сторон