Mohli byste zkontrolovat, o jakých položkách je každý rok záznam. Můžete to udělat tak, že zkontrolujete, zda se počet jednotlivých let pro každou položku rovná součtu let (pomocí COUNT DISTINCT
):
number_years = params[:end_year].to_i - params[:start_year].to_i + 1
@sale_averages = Sale.joins(:shops, :items)
.select('items.name, AVG(sale.price) as price')
.where("EXTRACT(year from season_year) BETWEEN #{params[:start_year]} AND #{params[:end_year]}")
.where('shops.name': params[:select_shop])
.group('items.name')
.having("(COUNT(DISTINCT(EXTRACT(year from season_year))) = #{number_years})")
Také jsem použil BETWEEN
místo <
a >
.Myslím, že chcete seskupovat podle názvu položky místo obchodu (jak tomu bylo ve vašem původním dotazu).