/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
nyeste i hver gruppe
Fra : Bo Rattenborg


Dato : 20-01-03 12:37

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

Eller blot
gruppe tilføjet
1 4
2 7
4 6

Mvh
Bo



 
 
Jimmy (20-01-2003)
Kommentar
Fra : Jimmy


Dato : 20-01-03 13:42


"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> wrote in message
news:3e2bdf6f$0$1740$ba624c82@nntp03.dk.telia.net...
> 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 ?


> Eller blot
> gruppe tilføjet
> 1 4
> 2 7
> 4 6

Det må være muligt at lave noget i stil med:

SELECT Gruppe, Tilføjet FROM tabel GROUP BY gruppe ORDER BY Tilføjet DESC

Ovenstående er utestet.

Jeg ville nok ikke have et tal i kolonne tilføjet, men et tidspunkt.
Det afhænger af dit behov.

Mvh
Jimmy



Mikkel Bundgaard (20-01-2003)
Kommentar
Fra : Mikkel Bundgaard


Dato : 20-01-03 13:47

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).

> 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;
--
Mikkel Bundgaard
Student at IT University of Copenhagen
Codito, Ergo Sum

Kristian Damm Jensen (20-01-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 20-01-03 22:35

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.



Nis Jorgensen (20-01-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 20-01-03 15:51

On Mon, 20 Jan 2003 12:37:23 +0100, "Bo Rattenborg" <bo.rattenborg@[no
spam]mail.dk> 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 ?

Det er (desværre) lidt kompliceret. Det nemmeste er nok denne

SELECT *
FROM TABEL T1
WHERE NOT EXISTS
(SELECT * FROM TABEL T2
WHERE t1.gruppe = t2.gruppe
AND t2.tilføjet > t1.tilføjet)

Skulle du nu bruge et eller andet underlødigt databaseprogram der ikke
understøtter subselects, kan du gøre således:

SELECT t1.felt1, t1.felt2, ...
FROM tabel t1, tabel t2
WHERE t1.gruppe = t2.gruppe
AND t1.tilføjet <= t2.tilføjet
GROUP BY t1.felt1, t1.felt2, ...
HAVING COUNT(*) = 1

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Bo Rattenborg (20-01-2003)
Kommentar
Fra : Bo Rattenborg


Dato : 20-01-03 19:45

> Det er (desværre) lidt kompliceret. Det nemmeste er nok denne
>
> SELECT *
> FROM TABEL T1
> WHERE NOT EXISTS
> (SELECT * FROM TABEL T2
> WHERE t1.gruppe = t2.gruppe
> AND t2.tilføjet > t1.tilføjet)
>
> Skulle du nu bruge et eller andet underlødigt databaseprogram der ikke
understøtter subselects, kan >du gøre således:

Jeg anvender no det du vil kalde et underlødigt databaseprogram - MySQL

> SELECT t1.felt1, t1.felt2, ...
> FROM tabel t1, tabel t2
> WHERE t1.gruppe = t2.gruppe
> AND t1.tilføjet <= t2.tilføjet
> GROUP BY t1.felt1, t1.felt2, ...
> HAVING COUNT(*) = 1

Dette ser dog også ud til at virke (fra Mikkel Bundgaard):
SELECT gruppe, max(tilføjet)
FROM tabel
GROUP BY gruppe;

Eller er der noget jeg / vi ikke er opmærksom på ?

Bo



Jimmy (20-01-2003)
Kommentar
Fra : Jimmy


Dato : 20-01-03 21:46


"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> wrote in message
news:3e2c43c4$0$1743$ba624c82@nntp03.dk.telia.net...

>
> Dette ser dog også ud til at virke (fra Mikkel Bundgaard):

Virker det jeg sendte ikke?

Mvh
Jimmy



Bo Rattenborg (20-01-2003)
Kommentar
Fra : Bo Rattenborg


Dato : 20-01-03 21:54

Jo tak Jimmy, det virker fint. Men jeg kan bedre gennemskue hvad der sker i
Nises eksempel - jeg er ret newbie.

Mvh
Bo



Nis Jorgensen (21-01-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 21-01-03 09:46

On Mon, 20 Jan 2003 19:45:29 +0100, "Bo Rattenborg" <bo.rattenborg@[no
spam]mail.dk> wrote:

>
>> SELECT t1.felt1, t1.felt2, ...
>> FROM tabel t1, tabel t2
>> WHERE t1.gruppe = t2.gruppe
>> AND t1.tilføjet <= t2.tilføjet
>> GROUP BY t1.felt1, t1.felt2, ...
>> HAVING COUNT(*) = 1
>
>Dette ser dog også ud til at virke (fra Mikkel Bundgaard):
>SELECT gruppe, max(tilføjet)
>FROM tabel
>GROUP BY gruppe;

Ja - det er da den nemme maade at goere det paa (du har dog ikke
citeret den korrekt . Min maade er lidt mere generel - kan fx give
de første N i hver gruppe med en lille ændring.

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste