1

各カテゴリのレコードを5つに制限して取得しようとしていますが、5つのレコードしか返されませんでした。

Rails ActiveRecordでこのSQLステートメントを変換するにはどうすればよいですか?

SELECT *
FROM "jobs" a
WHERE (
  SELECT COUNT(*)
  FROM jobs
  WHERE ID = a.ID
) <= 5
AND jobkey_confirmation IS NOT NULL
AND EXTRACT(MONTH from created_at) = EXTRACT(MONTH from now())

私は次のことを行うことができましたが、上記のように5つのレコードしか返されませんでした。

scope :confirmed_this_month, where("jobkey_confirmation IS NOT NULL AND EXTRACT(MONTH from created_at) = EXTRACT(MONTH from now())").group("category").limit(5).order("created_at DESC")
4

2 に答える 2

1
select j.*
from
    jobs j
    inner join (
        select
            row_number() over (partition by category_id order by id) rn,
            id
        from jobs
        where
            jobkey_confirmation IS NOT NULL
            AND EXTRACT(MONTH from created_at) = EXTRACT(MONTH from now())
    ) i on i.id = j.id
where rn <= 5
于 2012-10-18T15:06:58.763 に答える
1

find_by_sqlを使用できますか?

Job.find_by_sql('SELECT * FROM "jobs" a WHERE (SELECT COUNT(*) FROM jobs WHERE ID = a.ID ) <= 5 AND jobkey_confirmation IS NOT NULL AND EXTRACT(MONTH from created_at) = EXTRACT(MONTH from now()))

それとも、ARコールに完全に置き換えることを検討していますか?

-コメントからコードをプルアップ----

def self.limited_grouped_jobs 
    find_by_sql("SELECT * FROM jobs a WHERE (SELECT COUNT(*) FROM jobs WHERE ID = a.ID ) <= 5 AND jobkey_confirmation IS NOT NULL AND EXTRACT(MONTH from created_at) = EXTRACT(MONTH from now())")
end
于 2012-10-18T15:03:11.510 に答える