未經測試並相當困難沒有任何進一步的信息,但如果你有三種模式設置:
爲先,在此基礎上查詢:
SELECT manufacturer_id FROM products
LEFT JOIN sales ON sales.product_id = products.id
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LIMIT 10
這將是這樣的(您正在使用的Rails的版本你不提)
@top_manufacturers = Product.find(:all,
:select=> 'manufacturer_id FROM products',
:joins => 'LEFT JOIN sales ON sales.product_id = products.id',
:conditions => 'YEAR(created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)',
:limit => 10)
對於第二
SELECT sales.seller_id, SUM(sales.quantity), SUM(product_prices.price) FROM sales
LEFT JOIN products ON products.id = sales.product_id
LEFT JOIN product_prices ON product_prices.product_id = products.id
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LIMIT 10
@top_sellers = Sale.find(:all,
:select => 'sales.seller_id, SUM(sales.quantity), SUM(product_prices.price)',
:joins => 'LEFT JOIN products ON products.id = sales.product_id LEFT JOIN product_prices ON product_prices.product_id = products.id',
:conditions => 'YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)',
:limit => 10)
如果你沒有在所有的表created_at
和updated_at
列,那麼你應該將它們添加 - Rails的填充他們自動的,雖然我想我應該把你的month
列。
模型之間的關係是什麼?你可以把這個代碼放到你的問題中嗎?還請'生產'have_many'產品? – Anthony 2014-09-19 12:37:06
你會如何在SQL中做到這一點? – akonsu 2014-09-19 12:37:15
是的,製造商可以有許多產品。我還沒有模型的代碼 – DominikDe 2014-09-19 12:44:35