Mikkel Bundgaard wrote:
>
> On Mon, 20 Jan 2003 12:37:23 +0100, Bo Rattenborg wrote:
>
> > Tabel:
> > id gruppe tilføjet
> > 1 1 3
> > 2 1 4
> > 3 2 5
> > 4 4 6
> > 5 2 7
> >
> > Hvordan laver jeg en query der henter den nyeste post i hver gruppe ?
> >
> > Altså resultat skal være:
> > gruppe id tilføjet
> > 1 2 4
> > 2 5 7
> > 4 5 6
> Den sidste række skulle vist havde været 4 4 6
> Nedenstående virker kun hvis nyere poster har et større nummber (i
> tilføjet) end ældre poster. Et skud (skal dog sikkert rettes til alt
> efter hvilken database du bruger):
>
> SELECT gruppe, T.id, max(tilføjet)
> FROM tabel, tabel T
> GROUP BY gruppe
> WHERE T.tilføjet = max(tilføjet);
> // eller måske blot
> // WHERE T.tilføjet = tabel.tilføjet;
>
> Virker du kun hvis kolonnen tilføjet indeholder unikke poster (og sikert
> ikke i alle databaser).
Et par ændringer:
SELECT TA.gruppe, T.id, T.tilføjet
FROM tabel TA, tabel T
WHERE TA.gruppe = T.gruppe
GROUP BY TA.gruppe
HAVING T.tilføjet = max(TA.tilføjet);
Og det er trods alt kun nødvendigt at tilføjet er unik inden for den
samme gruppe, hvilket må være et rimeligt krav, sammenhængen taget i
betragtning.
Det bliver lidt mere intuitivt, hvis man i stedet laver det sammen med
en sub-select:
SELECT gruppe, id, tilføjet
FROM tabel T
WHERE tilføjet =
(select max(tilføjet)
from tabel TA
where TA.gruppe = T.gruppe
group by TA.gruppe);
men jeg er klar over at visse produkter vil få problemer....
> > Eller blot
> > gruppe tilføjet
> > 1 4
> > 2 7
> > 4 6
> Noget a la dette:
> SELECT gruppe, max(tilføjet)
> FROM tabel
> GROUP BY gruppe;
Klart det enkleste, men udelukker desværre, at man kan få evt. andre
attributter (som vi ikke har hørt noget om) med ud.
--
Kristian Damm Jensen | Feed the hungry at
www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.