mySQL - die letzten X Werte

OP #2077009
Moinsen!

Ich möchte aus meiner Datenbank die letzten X Werte rausbekommen (288, 
um genau zu sein ;) ).

Mit
1
select id, adc1 from `testtabelle` order by id desc limit 288
wäre die Aufgabe ja eigentlich schon erfüllt, aber ich hätte sie gerne 
in aufsteigender Reihenfolge.

Deswegen habe ich es (unter anderem) so versucht:
1
select id, adc1 from `testtabelle` where id in (SELECT id FROM `testtabelle` order by id desc limit 288) order by id

Das geht aber nicht. Als Meldung kommt:
1
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
mySQL Version ist die 5.0.51a

Ich könnte nun natürlich meine Auswerteschleife einfach umdrehen, das 
würde eigentlich auch nicht viel verändern. Aber es wurmt mich, dass ich 
es nicht schaffe, die Werte wie gewünscht mit EINER sql-Abfrage zu 
bekommen.
Gibt es da eine Möglichkeit?

Gruß...
...Markus
OP #2077036
Hm, ich hab' meine Frage wohl nicht ganz richtig formuliert. ;)

Bei 'asc' hätte ich ja die Werte mit der id 1-288 (wenn man annimmt, 
dass alle ids fortlaufend exisitieren), ich möchte aber die zuletzt 
eingetragenen Werte haben - und da insgesamt 288 Stück. Ob es schlau 
ist, da nach der id zu gehen, lassen wir mal dahingestellt. ;)

Bei 'desc' mit 'limit 288' habe ich die Werte, die ich möchte, aber sie 
sind in der Ausgabe natürlich auch absteigend sortiert. Diese Werte 
möchte ich nun nochmal aufsteigend sortieren, damit ich den ersten Wert 
in meinem Array habe und nicht den Letzten.

Wie viele Einträge existieren, weiss ich nicht. Könnte ich natürlich 
rausfinden, wäre aber wieder eine sql-Abfrage mehr. Und ich will das in 
EINER hinbekommen. ;)
Gast #2077041
kannst du die tabelle nicht um eine spalte erweitern und da einen 
timestamp eintragen? dann kannst du sehr einfach die letzten 288 werte 
selektieren...
gute n8
OP #2077042
@moepmoep: Das funktioniert (mit max(id)-287 ;) ), solange ich wirklich 
fortlaufende ids habe. Allerdings kann es vorkommen, dass zwischendurch 
mal was fehlt.

EDIT, weil moepmoep schneller war:
noch mal @moepmoep: Ein Timestamp macht definitiv Sinn, da ich die Werte 
der letzten 24 Stunden in meiner Grafik haben will. Und wenn mal einer 
fehlen sollte, sollte ich den eh interpolieren oder mir irgendwas 
anderes überlegen.
Im Moment möchte ich aber nur 288 Werte haben, damit meine erstellte 
Grafik immer die richtige Breite hat. Wenn da Werte von 24h+x mit bei 
sind, ist mir das erstmal relativ egal.
Wie gesagt, ich könnte die Schleife auch umdrehen und hätte dann das 
gewünschte Ergebnis. Aber irgendwie will ich immer noch EINE sql-Abfrage 
haben, mit der ich das anders hinbekommen kann. ;)
Gast #2077068
Versuch es mal hiermit:

(SELECT id, adc1 FROM `testtabelle` order by id desc limit 288)
UNION
(SELECT id, adc1 FROM `testtabelle` WHERE FALSE)
ORDER BY id ASC
Gast #2077087
Moment noch, ich hab ein wenig zu kompliziert gedacht...

Hiermit sollte es einfacher und auch ein wenig schneller funktionieren:

(SELECT * FROM `_categories` order by `page_id` desc limit 20)
ORDER BY page_id ASC
OP #2077345
Das war eigentlich auch einer meiner ersten Gedanken. Ich frage mich nur 
gerade, warum das nicht geklappt hatte. Da hatte ich wohl irgendwo einen 
Fehler drin und die Fehlermeldung nicht richtig gedeutet...
Muss ich nachher mal ausprobieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.