использование подзапроса в качестве таблицы на рельсах 3.1 - PullRequest
2 голосов
/ 30 января 2012

Я пытаюсь выбрать некоторые данные из другого запроса.SQL будет выглядеть так:

SELECT user_id, rank FROM 
(SELECT user_id, MAX(created_at) as latest_solution, COUNT(*) AS solved,
rank() OVER (ORDER by COUNT(*) desc) AS rank FROM submissions group by user_id) 
as leaderboard WHERE leaderboard.user_id = xx

, но у меня возникают проблемы при попытке перевести это на язык activerecord

Я думаю, что я в порядке с подзапросом

Submission.select('user_id, MAX(created_at) as latest_solution, COUNT(*) as solved, rank() OVER (ORDER BY count(*) desc) as rank').group('user_id')

но я не знаю, как использовать это как "стол"

1 Ответ

5 голосов
/ 30 января 2012

Я иду прямо к find_by_sql для чего-нибудь нетривиального:

Submission.find_by_sql(%q{
    select user_id,
           rank
    from (
        select user_id,
               max(created_at) as latest_solution,
               count(*) AS solved,
               rank() over (order by count(*) desc) as rank
        from submissions
        group by user_id
    ) as leaderboard
    where leaderboard.user_id = :user_id
}, :user_id => 'xx')

Оберните это в методе класса на Submission, и все будет в порядке.

...