[MySql 5.0.77] LIMIT mit Bedingung?
Markus Berber
- datenbank
0 Ilja0 Markus Berber0 Ilja0 Markus Berber0 Ilja
Ich habe folgende Tabelle mit Inhalt:
1 | 111111
2 | 222222
3 | 333333
4 | 444444
5 | 333333
6 | 555555
7 | 222222
8 | 666666
9 | 222222
10 | 777777
11 | 222222
Nun möchte ich zu jeder "bestnr" immer nur maximal 2 Einträge ausgeben.
Ergebnis:
1 | 111111
2 | 222222
7 | 222222
3 | 333333
5 | 333333
4 | 444444
6 | 555555
8 | 666666
10 | 777777
Ich stehe gerader auf dem Schlauch, kann mir jemand die dazu passende Query senden? Wäre mehr als dankbar.
Markus
moin,
Nun möchte ich zu jeder "bestnr" immer nur maximal 2 Einträge ausgeben.
limit hin oder her, ich würde es mit unterabfragen lösen. die frage ist, welche 2 einträge willst du den angezeigt bekommen, wahllos oder nach einem bestimmten kriterium ?
wie auch immer, ich gebe dir erst mal eine beispiel-abfrage. korrelierte unterabfragen ist das stichwort, wobei es wahrscheinlich schönere lösungen gibt, dazu müsste ich mich aber erst mal mehr mit den eigenheiten von mysql auseinander setzen. aber hier bekommst du jeweilse den datensatz mit der größten oder der kleinsten id der jeweiligen bestnr
SELECT t.id, t.bestnr
FROM tabelle t
WHERE t.id = (SELECT MAX(t2.id) FROM tabelle t2 WHERE t2.bestnr = t.bestnr)
OR t.id = (SELECT MIN(t2.id) FROM tabelle t2 WHERE t2.bestnr = t.bestnr)
Ilja
SELECT t.id, t.bestnr
FROM tabelle t
WHERE t.id = (SELECT MAX(t2.id) FROM tabelle t2 WHERE t2.bestnr = t.bestnr)
OR t.id = (SELECT MIN(t2.id) FROM tabelle t2 WHERE t2.bestnr = t.bestnr)
Hallo Ilja, vielen Dank.
Das ist schhonmal ganz gut, vielen Dank. Als Kriterium suche ich die letzten beiden (Zeitstempel) Einträge.
Besten Dank
Markus
moin,
Das ist schhonmal ganz gut, vielen Dank. Als Kriterium suche ich die letzten beiden (Zeitstempel) Einträge.
verräst du uns auch noch, wie die zeitstempel-spalte heißt oder sollen wir einfach einen namen nehmen, den du dann ersetzt ?
Ilja
Oh Sorry, das Feld heißt datetime und ist vom Type datetime. :)
moin
Oh Sorry, das Feld heißt datetime und ist vom Type datetime. :)
nach möglichkeit keine Namen verwenden, die reservierten wörter enstsprechen könnten.
SELECT t.id, t.bestnr
FROM tabelle t
WHERE t.datetime >= (SELECT MAX(t2.dateime)
FROM tabelle t2
WHERE t2.bestnr = t.bestnr
AND t2.datetime < (SELECT MAX(t3.datetime)
FROM tabelle t3
WHERE t3.bestnr = t.bestnr
)
)
;
es gibt wohl noch einen eleganteren weg mit einer sortierung und limit,daswäre dann aber mysql spezifisch.
Ilja