Если я правильно понимаю, вы, в принципе, хотите вернуть все строки, где штамп стоит первым в каждом месяце (вычтя 3 часа)?Если (и это большой случай), у вас есть фиксированное окно, скажем, последние 6 месяцев, вы можете просто перечислить 6 тестов диапазона.Но, тем не менее, я не уверен, что индексированный доступ будет быстрее в любом случае.
select *
from transactions
where stamp between timestamp '2010-06-01 03:00:00' and timestamp '2010-06-02 02:59:59'
or stamp between timestamp '2010-07-01 03:00:00' and timestamp '2010-07-02 02:59:59'
or stamp between timestamp '2010-08-01 03:00:00' and timestamp '2010-08-02 02:59:59'
or stamp between timestamp '2010-09-01 03:00:00' and timestamp '2010-09-02 02:59:59'
or stamp between timestamp '2010-10-01 03:00:00' and timestamp '2010-10-02 02:59:59'
or stamp between timestamp '2010-11-01 03:00:00' and timestamp '2010-11-02 02:59:59'
or stamp between timestamp '2010-12-01 03:00:00' and timestamp '2010-12-02 02:59:59';
Внимание!Я не уверен, как работает миллисекундная часть метки времени.Возможно, вам придется дополнить его соответственно.