letzten 10 Datensätze, doch keine doppelten
Michi
- datenbank
- mysql
ich schon wieder 😱
ich möchte die letzten 10 Datensätze ausgeben:
SELECT datum, name FROM stat ORDER by datum ASC Limit 10
aber es kann sein, das mehrere Datensätze mit gleichem 'name' in der Tabelle stehen. So möchte ich nur einen, den aktuellste Datensatz anzeigen.
Zuerst habe ich es mit group ausprobiert, doch da wird irgendwie sortiert und irgendein Datensatz ausgegeben. Kann ich group auch so sortieren das der erste Datensatz ausgegeben wird.
Michi
Hi,
ich möchte die letzten 10 Datensätze ausgeben:
SELECT datum, name FROM stat ORDER by datum ASC Limit 10
aber es kann sein, das mehrere Datensätze mit gleichem 'name' in der Tabelle stehen. So möchte ich nur einen, den aktuellste Datensatz anzeigen.
nach Name gruppieren, und statt des datum das Maximum der Datümmer ausgeben.
also so:
SELECT max(datum), name FROM stat ORDER BY datum ASC GROUP BY name LIMIT 10;
cu,
Andreas a/k/a MudGuard
Hi,
ich möchte die letzten 10 Datensätze ausgeben:
SELECT datum, name FROM stat ORDER by datum ASC Limit 10
Hm. Für "die letzten" müßte es doch eher ORDER BY datum DESC LIMIT 10;
heißen.
cu,
Andreas a/k/a MudGuard
SELECT max(datum), name FROM stat GROUP BY name ORDER BY datum DESC LIMIT 10
Schaut nicht schlecht aus, aber stimmt leider auch nicht bei der Ausgabe.
es werden zwar die richtige Datensätze ausgewählt nur die Sortierung haut nicht hin
Michael-2021-05-26 20:52:53
Maria-2021-05-26 20:18:15
Hui Buh-2021-05-26 11:08:10
Bernd das Brot-2021-05-26 21:01:59
Bernd das Brot, sollte an erster Stelle sein, nicht an letzter
Bernd das Brot, sollte an erster Stelle sein, nicht an letzter
Tja. Wie wärs denn damit, dieses der Datenbank statt uns zu „sagen“?
SELECT
max(datum),
name
FROM stat
GROUP BY name
ORDER BY
name,
datum DESC
LIMIT 10
Bernd das Brot, sollte an erster Stelle sein, nicht an letzter
Tja. Wie wärs denn damit, dieses der Datenbank statt uns zu „sagen“?
SELECT max(datum), name FROM stat GROUP BY name ORDER BY name, datum DESC LIMIT 10
Das führt, wie ich gerade sehe, dann aber zu einem Problem: Das Limit begrenzt dann auf die 10 ersten Namen.
Möglichweise hilft ein Subselect:
SELECT
datum, name
(
SELECT
MAX(datum) AS datum,
name
FROM stat
GROUP BY name
ORDER BY
datum DESC
LIMIT 10
)
ORDER BY name;
So Michi,
Da Dein Problem weniger eindeutig beschrieben ist als Du vielleicht annimmst könnte auch ein stumpfes
SELECT
max(datum),
name
FROM stat
GROUP BY name
ORDER BY
datum DESC
name,
LIMIT 10
dieses lösen.
Im ersten Satz steht: Jetzt bist Du dran.
Hallo Michi,
bei alledem ist eine Frage zu klären: selektierst Du NUR Name und Datum? Oder sind da noch mehr Spalten?
Weitere Frage wäre: Ist der Name in der Table eindeutig? Namen sind nämlich typischerweise mehrdeutig. Das mag bei Dir anders sein, aber das muss man dann sagen. Wenn deine Table mehr als einen - sagenwirmal - Michi enthalten kann, wäre die weitere Frage, wie Du mehrere Michis auseinanderhältst.
Rolf
Hallo Rolf,
Nein es gibt definitiv nur einen Michi, sowie einen Rolf 😜.
und ich hole mir noch ein zwei Felder aus der Spalte.
Michi
Hallo Michi,
und gehen diese weiteren Felder in die Eindeutigkeitsprüfung ein? Oder kann es sein, dass Michi am 01.05.2021 im Feld ˋhuiˋ den Wert "Buh" stehen hat und am 10.05. den Wert "Muh", und du möchtest den Eintrag für Michi am 10.05. haben?
In dem Fall kommst Du mit Subselects und Group By, wie bisher diskutiert, nicht weiter. Es ist lösbar, aber bevor ich mir dazu die Finger abtippe (abgesehen davon dass ich das hier im Forum schon mehrfach beschrieben habe), hätt ich gern deine Bestätigung
Update: Ich glaube, hier steht so was ähnliches.
Rolf