Вы должны думать в терминах того, как думает база данных, и как Sequel превращает рубин диапазоны в SQL:
require 'date'
today = Date.today # => #<Date: 2013-07-03 ((2456477j,0s,0n),+0s,2299161j)>
first_of_month = (today - today.day) + 1
first_of_month # => #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>
next_month = today + 31 # => #<Date: 2013-08-03 ((2456508j,0s,0n),+0s,2299161j)>
last_of_month = next_month - next_month.day # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)>
last_of_month # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)>
Entry.where(:date => [first_of_month .. last_of_month]).sum(:duration)
Я хотел бы показать вам выход SQL, но я не знаю, базы данных типа, который вы используете, и, ну, я ленив.
Часто вы можете воспроизводить трюки внутри БД путем усечения «сейчас», чтобы удалить день, а затем найти все временные метки, усеченная дата которых совпадает с ним. Это гораздо более специфично для DBM, чем использование Sequel, которое уже знает, как справляться с диапазонами при преобразовании их в оператор «между» -типом.