Du kan tjekke, hvilke varer der er rekord for hvert år. Du kan gøre det ved at kontrollere, om antallet af forskellige år for hver vare er lig med det samlede antal år (ved at bruge 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})")
Jeg har også brugt BETWEEN
i stedet for <
og > .Jeg tror, du vil gruppere efter varenavn i stedet for butik (som det var i din oprindelige forespørgsel).