2013-10-31 193 views
1

我有一個Unit模型has_many :transacions。交易有一個type列,表明它是什麼類型的交易:銷售,轉讓,預訂等。ActiveRecord加入聚合查詢

我想找到所有具有給定交易類型作爲其最新交易的單位。我無法弄清楚如何在ActiveRecord中做到這一點。

在SQL中,例如,如果我想找到使用「傳送」作爲其最新的事務中的所有單位,我可以這樣做:

SELECT u.*, tx.* FROM units u INNER JOIN transactions tx ON u.id=tx.unit_id 
INNER JOIN 
(
    SELECT tx.unit_id, max(tx.created_at) AS latest_tx_date 
    FROM transactions tx 
    GROUP BY tx.unit_id 
    ORDER BY tx.unit_id 
) max_dates 
ON (tx.unit_id=max_dates.unit_id AND tx.created_at>=max_dates.latest_tx_date) 
WHERE tx.type='Transfer'; 

這與我遇到的麻煩內部查詢的加盟。有一個可讀的ActiveRecord方式來做到這一點,或者我應該只使用SQL?

回答

0

ActiveRecord支持single table inheritance。無需編寫普通的SQL。

+0

是的,我正在使用單表繼承。因此'transactions'表上的'type'列。 – jcm

+0

「@ unit.sales」無效嗎? – nTraum

+0

這不是我想要做的。以「sale」爲例,我並不是想要獲得最新的「sale」交易。我試圖找到最近的交易是「銷售」而不是另一種類型的單位。 – jcm