Navrhoval bych, abyste o problému příliš nepřemýšleli a použili pouze první datum/čas v měsíci. Postgres má spoustu funkcí specifických pro datum -- z date_trunc()
do age()
na + interval
-- na podporu dat.
Můžete je snadno převést do požadovaného formátu, získat rozdíl mezi dvěma hodnotami a tak dále.
Pokud svůj dotaz formulujete jako:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Pak může snadno využít index na (user_id, year_month)
nebo (year_month, user_id)
.