0

私は自分のサイトを開発しましたが、それは私のローカルマシンの魅力のように機能します。クエリは、このスレッドの仲間のStackoverflowメンバーによって提供されます。

関連するschema.rbの部分

ローカルでHerokuと同じデータ。

select  *
from    (
        select  *
        ,       row_number() over (partition by odds_type order by odds_index desc) as rn2
        from    (
                select  *
                ,       row_number() over (partition by event_id, bookmaker_id, odds_type 
                                           order by created_at desc) as rn1
                from    Odds
                where   event_id = #{e.id}
                ) sub1
        where   rn1 = 1
        ) sub2
where   rn2 = 1

コンソールのエラー

Odds Load (88.4ms)  select * from ( select *, row_number() over (partition by odds_type order by odds_index desc) as rn2 from (select *, row_number() over (partition by event_id, bookmaker_id, odds_type order by created_at desc) as rn1 from Odds where event_id = 21 ) sub1 where rn1 = 1 ) sub2where rn2 = 1
ActiveRecord::StatementInvalid: PG::Error: ERROR:  syntax error at or near "over"
LINE 1: select * from ( select *, row_number() over (partition by od...
                                           ^
4

1 に答える 1

3

row_number()およびwindow関数は、一般的にPostgreSQL8.4以降で使用できます。このエラーは、古いバージョン(8.3?)でこのクエリを試行しているため、機能しないことを示しています。

更新:PG 9.xで元の質問と回答を調べた後、PostgreSQL固有のDISTINCT ON句を使用しても同じ結果が得られると思います。これは非標準ですが、古いバージョンのPGで利用でき、非常に便利です。これが私の提案です:

SELECT DISTINCT on (ot) bi,ot,oi FROM
  (select distinct on (bi,ot) bi,ot,oi from odds
    where ei=1 order by bi,ot,created_at desc) subq
 ORDER BY ot,oi DESC;
于 2012-06-12T11:45:49.257 に答える