Re: get only rows for latest version of contents

Поиск
Список
Период
Сортировка
От Sébastien Meudec
Тема Re: get only rows for latest version of contents
Дата
Msg-id 20071025064454.B6D3A1C00086@mwinf2727.orange.fr
обсуждение исходный текст
Ответ на Re: get only rows for latest version of contents  ("Christian Kindler" <christian.kindler@gmx.net>)
Ответы Re: get only rows for latest version of contents  (Erik Jones <erik@myemma.com>)
Список pgsql-sql
Thx a lot Chris.

In fact the correct SQL was (rewritten with inner join because of it is
required by my api):

select b1.*
from business b1
inner join (select idnode,max(version_no) as version_no from business           group by idnode) as b2
on b1.idnode = b2.idnode and  (b1.version_no = b2.version_no or b2.version_no is null)

Regards,
Seb.


> -----Message d'origine-----
> De : pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-
> owner@postgresql.org] De la part de Christian Kindler
> Envoyé : mercredi 24 octobre 2007 11:55
> À : Sébastien Meudec
> Cc : pgsql-sql@postgresql.org
> Objet : Re: [SQL] get only rows for latest version of contents
>
> Hi!
>
> not quick mut works
>
> select * from business b1
> where b1.version_no = (SELECT max(version_no) FROM business b2.
>                         where b2.idnode = b1.idnode
>                        )
>
> If you want to make this quiry faster du a regular join
>
> select b1.*
>   from business b1,
>        (SELECT max(version_no) FROM business b2.
>          where b2.idnode = b1.idnode
>        ) as b2
> where b1.idnode = b2.idnode
>   and b1.version_no = b2.version_nr
>
> Regards Chris
>
> PS written without running any sql, maybe there are some syntax issues,
> but i am shure you will figure these out :-)
>
>
>
> On Wed, October 24, 2007 11:29 am, Sébastien Meudec wrote:
> > Hi everybody.
> >
> > I have a table like that (i simplified it):
> > CREATE TABLE business {
> >   idnode integer not null,
> >   version_no integer,
> >   c1 text,
> >   c2 text,
> >   c3 text
> > }
> > With a unique index in (idnode,version_no).
> >
> > This table records many version from contents identified by idnode where
> > texts may be different.
> > So i can have:
> > Idnode | version_no | c1    | c2    | c3
> > 111    | 2          | foo1  | foo2  | foo3
> > 111    | 1          | fee1  | foo2  | foo3
> > 111    | null       | fee1  | fee2  | fee3
> > 222    | null       | too1  | too2  | too3
> > 333    | 1          | xoo1  | xoo2  | xoo3
> > 333    | null       | yoo1  | yoo2  | yee3
> >
> > I want to select all columns but only for last (greatest) version of
> each
> > content. So I want a result like:
> > Idnode | version_no | c1    | c2    | c3
> > 111    | 2          | foo1  | foo2  | foo3
> > 222    | null       | too1  | too2  | too3
> > 333    | 1          | xoo1  | xoo2  | xoo3
> >
> > If i do:
> > SELECT idnode, max(version_no) FROM business
> > GROUP BY idnode ORDER BY idnode;
> >
> > I get effectively only last version:
> > Idnode | version_no
> > 111    | 2
> > 222    | null
> > 333    | 1
> >
> > But as soon that i want to get texts, I don't know how to build the SQL.
> > In each SQL i tested i've been forced to put text column in a group by
> > since
> > i used aggregate for version_no:
> > SELECT idnode, max(version_no), c1, c2, c3 FROM BUSINESS
> > GROUP BY idnode, c1, c2, c3 ORDER BY idnode;
> >
> > But with that SQL, because of the group by and different values in text
> i
> > get
> > Idnode | version_no | c1    | c2    | c3
> > 111    | 2          | foo1  | foo2  | foo3
> > 111    | 1          | fee1  | foo2  | foo3
> > 111    | null       | fee1  | fee2  | fee3
> > 222    | null       | too1  | too2  | too3
> > 333    | 1          | xoo1  | xoo2  | xoo3
> > 333    | null       | yoo1  | yoo2  | yee3
> >
> > As we can't do aggregate in join neither in where, i can't get what i
> > want.
> >
> > Anybody could help me to build proper SQL ?
> >
> > Thx for your answers.
> > Sébastien.
> >
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 7: You can help support the PostgreSQL project by donating at
> >
> >                 http://www.postgresql.org/about/donate
> >
> --
> cu
> Chris
>
> Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten
> Browser-Versionen downloaden: http://www.gmx.net/de/go/browser
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: You can help support the PostgreSQL project by donating at
>
>                 http://www.postgresql.org/about/donate




В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: ERROR: failed to re-find parent key in "pk_ep07"
Следующее
От: Otniel Michael
Дата:
Сообщение: Re: ERROR: failed to re-find parent key in "pk_ep07"