आप जांच सकते हैं कि प्रत्येक वर्ष के लिए कौन सी वस्तुओं का रिकॉर्ड है। आप यह जांच कर सकते हैं कि प्रत्येक आइटम के लिए अलग-अलग वर्षों की संख्या कुल वर्षों के बराबर है (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})")
मैंने BETWEEN
. का भी उपयोग किया है <
. के बजाय और >
.मुझे लगता है कि आप दुकान के बजाय आइटम नाम के आधार पर समूह बनाना चाहते हैं (जैसा कि यह आपकी मूल क्वेरी में था)।