1

今日は少し頭がぼやけていて、ActiveRecord/Squeel/ARel を使用してこの SQL クエリを正しく表現する方法がわかりません。

SELECT `d1`.* FROM `domain_names` d1
WHERE `d1`.`created_at` = (
  SELECT MAX(`d2`.`created_at`)
  FROM `domain_names` d2
  WHERE `d2`.`owner_type` = `d1`.`owner_type`
  AND `d2`.`owner_id` = `d1`.`owner_id`
  AND `d2`.`key` = `d1`.`key`
)

何か案は?

背景: DomainName モデルには、多様な所有者と、所有者がさまざまな種類のドメイン名を持つことを可能にする「キー」フィールドがあります。[owner_type, owner_id, key]上記のクエリは、一意のタプルごとに最新のドメイン名を取得します。

編集:

JOIN を使用した同じクエリを次に示します。

SELECT `d1`.* FROM `domain_names` d1
JOIN (
  SELECT `owner_type`, `owner_id`, `key`, MAX(`created_at`) max_created_at
  FROM `domain_names`
  GROUP BY `owner_type`, `owner_id`, `key`
) d2
  ON `d2`.`owner_type` = `d1`.`owner_type`
    AND `d2`.`owner_id` = `d1`.`owner_id`
    AND `d2`.`key` = `d1`.`key`
WHERE `d1`.`created_at` = `d2`.`max_created_at`
4

0 に答える 0