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