Maximale Datensätzepro Gruppierung

Maximale Datensätzepro Gruppierung

am 17.11.2006 15:22:18 von Steffen Mosthaf

Hallo,

ich habe hier eine knifflige Aufgabe, und bin mir auch nicht sicher ob
man das mit nur _einer_ Query lösen kann.

Folgendes Ergebnis einer Abfrage mit zwei verknüpften Tabellen:

aID | Auto
----------------
10 | BMW
22 | BMW
26 | BMW
33 | Audi
14 | Audi
51 | Audi
632 | Audi
777 | VW

Jetzt wäre es schön wenn pro Auto nur maximal die ersten zwei Datensätze
ausgegeben würden, also so:

aID | Auto
----------------
10 | BMW
22 | BMW
33 | Audi
14 | Audi
777 | VW

Also ein "Limit" pro Gruppe wäre schön, gibts aber nicht.

Hier der Code zum nachbauen der großen Tabelle ;)
create table testauto (aid int, autos varchar(10)) engine=memory;
insert into testauto (aID,autos)
values
(10,'BMW'),
(22,'BMW'),
(26,'BMW'),
(33,'Audi'),
(14,'Audi'),
(51,'Audi'),
(632,'Audi'),
(777,'VW');


Gruss
Steffen

--
(o_ | PGP-Key-ID: 0x80F9C604
//\ | ICQ: 116609337
V_/_ | registered Linux User #215802 @ http://counter.li.org
LINUX, weils Betriebssystem eben ned wurscht ist!

Re: Maximale Datensätzepro Gruppierung

am 17.11.2006 16:37:55 von Harald Fuchs

In article ,
Steffen Mosthaf writes:

> Hallo,
> ich habe hier eine knifflige Aufgabe, und bin mir auch nicht sicher ob
> man das mit nur _einer_ Query lösen kann.

> Folgendes Ergebnis einer Abfrage mit zwei verknüpften Tabellen:

> aID | Auto
> ----------------
> 10 | BMW
> 22 | BMW
> 26 | BMW
> 33 | Audi
> 14 | Audi
> 51 | Audi
> 632 | Audi
> 777 | VW

> Jetzt wäre es schön wenn pro Auto nur maximal die ersten zwei Datens=
ätze
> ausgegeben würden, also so:

> aID | Auto
> ----------------
> 10 | BMW
> 22 | BMW
> 33 | Audi
> 14 | Audi
> 777 | VW

Meinst Du mit "die ersten zwei" nach aID sortiert? Dann z.B. so:

SELECT aID, autos
FROM testauto
WHERE (SELECT count(*)
FROM testauto t
WHERE t.autos =3D testauto.autos
AND t.aID < testauto.aID
) < 2

Re: Maximale Datensätzepro Gruppierung

am 20.11.2006 09:03:00 von Steffen Mosthaf

Harald Fuchs wrote:

> In article ,
> Steffen Mosthaf writes:
>
>> Hallo,
>> ich habe hier eine knifflige Aufgabe, und bin mir auch nicht sicher
>> ob man das mit nur _einer_ Query lösen kann.
>
>> Folgendes Ergebnis einer Abfrage mit zwei verknüpften Tabellen:
>
>> aID | Auto
>> ----------------
>> 10 | BMW
>> 22 | BMW
>> 26 | BMW
>> 33 | Audi
>> 14 | Audi
>> 51 | Audi
>> 632 | Audi
>> 777 | VW
>
>> Jetzt wäre es schön wenn pro Auto nur maximal die ersten zwei
>> Datensätze ausgegeben würden, also so:
>
>> aID | Auto
>> ----------------
>> 10 | BMW
>> 22 | BMW
>> 33 | Audi
>> 14 | Audi
>> 777 | VW
>
> Meinst Du mit "die ersten zwei" nach aID sortiert? Dann z.B. so:
>
> SELECT aID, autos
> FROM testauto
> WHERE (SELECT count(*)
> FROM testauto t
> WHERE t.autos = testauto.autos
> AND t.aID < testauto.aID
> ) < 2

Hallo,

danke schon mal für die Antwort.
Ich versuche mal deinen Ansatz zu übernehmen und etwas umzustellen, weil
ich hätte gerne eine Sortierung nach absteigender "aID".

Gruß
Steffen
--
(o_ | PGP-Key-ID: 0x80F9C604
//\ | ICQ: 116609337
V_/_ | registered Linux User #215802 @ http://counter.li.org
LINUX, weils Betriebssystem eben ned wurscht ist!

Re: Maximale Datensätzepro Gruppierung

am 20.11.2006 10:32:15 von Harald Fuchs

In article ,
Steffen Mosthaf writes:

>> SELECT aID, autos
>> FROM testauto
>> WHERE (SELECT count(*)
>> FROM testauto t
>> WHERE t.autos =3D testauto.autos
>> AND t.aID < testauto.aID
>> ) < 2

> Hallo,

> danke schon mal für die Antwort.
> Ich versuche mal deinen Ansatz zu übernehmen und etwas umzustellen, wei=
l
> ich hätte gerne eine Sortierung nach absteigender "aID".

Also die höchsten beiden aIDs jeder Gruppe? Das wäre dann

SELECT aID, autos
FROM testauto
WHERE (SELECT count(*)
FROM testauto t
WHERE t.autos =3D testauto.autos
AND t.aID > testauto.aID
) < 2