Запрос PostgreSQL работает локально, но не в Heroku (те же данные) - PullRequest
3 голосов
/ 11 сентября 2011

Вот запрос:

ActiveRecord :: StatementInvalid (PGError: ОШИБКА: синтаксическая ошибка на или около "более", выбор *, ранжирование () более (разделение по thread_i ... ^

     SELECT *
     FROM (                                                                  
             select *, rank() over (partition by thread_id order by created_at DESC)
             from posts
             where circle_id IN (134) OR (receiver_id=3)
           ) as dt
     WHERE rank = 1

РЕДАКТИРОВАТЬ: вот подробное объяснение того, что я пытаюсь сделать: Приложение Rails 3 с PostgreSQL - Получение списка сообщений, сгруппированных по разговорам

Получается Herokuобщая БД - это PostgreSQL версии 8.3, поэтому нет функции windows, поэтому возникает вопрос: как мне выполнить этот запрос в PostgreSql 8.3?

СПАСИБО!

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011

1001 * попробовать *

SELECT p.*
 FROM (                                                                  
         select x.thread_id, max(x.created_at) as maxdt
         from posts x
         where x.circle_id IN (134) OR x.receiver_id=3
         group by x.thread_id
       ) as dt
 INNER JOIN posts p ON p.thread_id = dt.thread_id and p.created_at = dt.maxdt 
 ORDER BY p.created_at DESC

РЕДАКТИРОВАТЬ - согласно комментарию:

SELECT p.*
 FROM (                                                                  
         select x.thread_id, max(x.created_at) as maxdt, max (OID) maxo
         from posts x
         where x.circle_id IN (134) OR x.receiver_id=3
         group by x.thread_id
       ) as dt
 INNER JOIN posts p ON p.thread_id = dt.thread_id and p.created_at = dt.maxdt AND p.OID = dt.maxo
 ORDER BY p.created_at DESC
1 голос
/ 11 сентября 2011

Это должно привести вас туда:

 SELECT p.*
 FROM (                                                                  
         select thread_id, max(created_at) as maxdt
         from posts
         where circle_id IN (134) OR (receiver_id=3)
       ) as dt
 INNER JOIN posts p ON p.thread_id = dt.thread_id and p.created_at = dt.maxdt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...