ActiveRecord加入聚合查询

时间:2013-10-31 14:43:55

标签: sql ruby-on-rails activerecord

我有一个Unit模型has_many :transacions。交易有一个type列,表明交易的类型:销售,转让,预订等。

我想找到具有给定交易类型的所有单位作为其最新交易。我无法弄清楚如何在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?

1 个答案:

答案 0 :(得分:0)

ActiveRecord支持single table inheritance。无需编写纯SQL。