Бих предложил да не мислите твърде много за проблема и просто да използвате първата дата/час от месеца. 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)
.