Jag skulle föreslå att du inte tänker för mycket på problemet och bara använder det första datumet/tiden i månaden. Postgres har massor av datumspecifika funktioner -- från date_trunc()
till age()
till + interval
-- för att stödja datum.
Du kan enkelt konvertera dem till det format du vill ha, få skillnaden mellan två värden och så vidare.
Om du formulerar din fråga som:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Då kan den enkelt dra nytta av ett index på (user_id, year_month)
eller (year_month, user_id)
.