【问题标题】:ActiveRecord joins on aggregate queryActiveRecord 连接聚合查询
【发布时间】:2013-10-31 14:43:54
【问题描述】:

我有一个Unit 模型has_many :transacions。交易有一个type 列,指示它是什么类型的交易:销售、转让、预订等。

我想找到所有具有给定交易类型的单位作为他们的最新交易。我不知道如何在 ActiveRecord 中进行操作。

在 SQL 中,例如,如果我想查找所有以“Transfer”为最新交易的单位,我可以这样做:

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 吗?

【问题讨论】:

    标签: sql ruby-on-rails activerecord


    【解决方案1】:

    ActiveRecord 支持single table inheritance。无需编写简单的 SQL。

    【讨论】:

    • 是的,我使用的是单表继承。因此transactions 表上的type 列。
    • 这不是我想要做的。以sale 为例,我不想获取最新的sale 交易。我正在尝试获取最新交易是“销售”而不是其他类型的单位。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2011-12-15
    • 2023-02-03
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2010-10-24
    相关资源
    最近更新 更多