【发布时间】:2011-09-12 13:40:31
【问题描述】:
这里是查询:
ActiveRecord::StatementInvalid (PGError: ERROR: 在“over”处或附近出现语法错误 select *, rank() over (partition by 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 app with PostgreSQL - Getting the list of messages grouped by converstation
事实证明 Heroku 共享数据库是 PostgreSQL 8.3 版,因此没有 windows 功能,所以问题变成了如何在 PostgreSql 8.3 中执行此查询?
谢谢!
【问题讨论】:
-
Derek 和 Yahia 的派生表解决方案应该适用于 8.3。不过,
posts.created_at = dt.maxdt有可能为单个线程产生多个结果。您可能希望包含一个客户端检查来处理重复的thread_id,created_at对。重复的可能性很低,但“低”和“零”并不完全相同。 -
用重复问题的可能解决方案更新了我的答案...
标签: sql ruby-on-rails-3 postgresql heroku