Sugiro não pensar muito sobre o problema e usar apenas a primeira data/hora do mês. Postgres tem muitas funções específicas de data -- de
date_trunc()
para age()
para + interval
-- para suportar datas. Você pode convertê-los prontamente para o formato desejado, obter a diferença entre dois valores e assim por diante.
Se você formular sua consulta como:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Em seguida, ele pode aproveitar prontamente um índice em
(user_id, year_month)
ou (year_month, user_id)
.