Saya sarankan untuk tidak berpikir terlalu keras tentang masalah ini dan hanya menggunakan tanggal/waktu pertama dalam sebulan. Postgres memiliki banyak fungsi khusus tanggal -- dari date_trunc() ke age() ke + interval -- untuk mendukung tanggal.
Anda dapat dengan mudah mengonversinya ke format yang Anda inginkan, mendapatkan perbedaan antara dua nilai, dan seterusnya.
Jika Anda mengutarakan kueri Anda sebagai:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Kemudian dapat dengan mudah memanfaatkan indeks di (user_id, year_month) atau (year_month, user_id) .