Il tuo errore è stato usare riempito_at in ordine probabilmente nell'ambito predefinito.
Puoi risolverlo utilizzando senza ambito per eliminare gli ambiti predefiniti:
Income.unscoped
.group('date(filled_at)')
.having("date(filled_at) > ?", Date.today - n)
.sum(:lines_price)
o
Income.unscoped
.group('date(filled_at)')
.having("date(filled_at) > ?", Date.today - n)
.sum(:lines_price)
.order('date(filled_at) ASC')
ma penso che sarà meglio usare dove invece di avere
Income.unscoped
.where("date(filled_at) > TIMESTAMP ?", Date.today - n)
.group('date(filled_at)')
.sum(:lines_price)
.order('date(filled_at) ASC')
Devi stare attento a usare TIMESTAMP perché 2012-12-04 diventerà 2012-12-04 00:00:00 quindi se non vuoi questo giorno come risultato usa Date.today - (n - 1)
Se crei un indice nella colonna filled_at
create index incomes_filled_at on incomes(filled_at);
migrazione:
add_index :incomes, :filled_at
e hai molti dati in questa tabella, l'indice verrà utilizzato nel filtraggio. Quindi la query dovrebbe essere molto più veloce.
Quindi scrivi entrambi e verifica che è più veloce (devi creare un indice su filled_at se non ne hai uno).