Бих предложил да не мислите твърде много за проблема и просто да използвате първата дата/час от месеца. Postgres има много специфични за датата функции – от date_trunc() към age() до + interval -- за поддържане на дати.
Можете лесно да ги конвертирате в желания от вас формат, да получите разликата между две стойности и т.н.
Ако формулирате заявката си като:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
След това може лесно да се възползва от индекс на (user_id, year_month) или (year_month, user_id) .