Re: A challenge for the SQL gurus out there...
От | Merlin Moncure |
---|---|
Тема | Re: A challenge for the SQL gurus out there... |
Дата | |
Msg-id | b42b73150809081849l29b7ef8csa3c1ca2bdf03de18@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: A challenge for the SQL gurus out there... (Gregory Stark <stark@enterprisedb.com>) |
Ответы |
Re: A challenge for the SQL gurus out there...
|
Список | pgsql-general |
On Sun, Sep 7, 2008 at 6:09 AM, Gregory Stark <stark@enterprisedb.com> wrote: > "Uwe C. Schroeder" <uwe@oss4u.com> writes: > >> I want to get a list looking like >> >> forum id thread_id post_id >> 1 6 443 >> 2 9 123 >> 3 3 557 > ... >> It all boils down to me not being able to come up with a query that gives me >> the latest post per forum_id. > > In a situation like this I would probably denormalize the tables slightly by > adding a form_id key to the individual posts. That would make it hard to ever > move a thread from one forum to another, though not impossible, but would help > in this case as well as any other time you want to do an operation on all > posts in a forum regardless of thread. <sql guru hat on> select f.*, ( select (t, ( select p from post p where p.thread_id = t.thread_id order by post_id desc limit 1 )) from thread t where forum_id = f.forum_id order by thread_id desc limit 1 ) as threadpost from forum f; :-) 'thread post' is a nested composite, ((thread), post). The above will pretty much guarantee a fast query unless the number of forums is large. To pull out the composite fields, wrap in a subquery or (better yet) fire up libpqtypes. merlin
В списке pgsql-general по дате отправления: