Hilfe mit SQL Anfrage
Bastian
- datenbank
0 Gonzo0 Bastian0 Vinzenz Mai0 Bastian
Hallo,
ich habe eine Tabelle "table" mit ca. 30 Spalten. In der Spalte "points" sind Werte drin wie:
Pkt01, Pkt02, Pkt02, Pkt03, Pkt04, Pkt04, Pkt05, ...
Ich möchte immer nur den neusten Punkt (den am weitesten unten in der Tabelle) und jeweils nur ein Punkt haben.
SELECT DISTINCT points FROM TABLE
...gibt mir zwar jeweils nur einen Punkt, aber die restlichen Daten fehlen. Wie kann ich mir das ausgeben lassen, ohne dass ich wiederum alle Punkte (zwei mal Pkt02 oder Pkt04 bekomme)?
Pkt01, Pkt02, Pkt02, Pkt03, Pkt04, Pkt04, Pkt05, ...
Ich möchte immer nur den neusten Punkt (den am weitesten unten in der Tabelle) und jeweils nur ein Punkt haben.
Falls du den zeitlich neuesten Eintrag haben willst, dann speichere das Erstellungs- oder Änderungsdatum, entweder mit einer Spalte DATETIME und der Funktion NOW() (für ein Erstellungsdatum) oder mit einer Spalte TIMESTAMP (für ein Erstellungs- und Änderungsdatum, aktualisiert sich automatisch).
Falls "neuestes Datum" und "neuester Punkt" jedoch nicht analog verlaufen, "neuester Punkt" aber kontinuierlich steigend ist, dann sortiere nach points:
select * from tabelle order by points desc limit 1.
Bringt mir leider nichts, denn dann habe ich in der Ausgabemenge immer noch mehrere Punkte mit gleichem Index:
Pkt05, Pkt04, Pkt04, Pkt03, Pkt02, Pkt02, Pkt01, ...
Ich will als Ausgabe das "DISTINCT":
Pkt01, Pkt02, Pkt03, Pkt04, Pkt05, ...
Die Sortierung ist nicht so das Problem, denn die untersten Einträge sind immer am neusten. Die Frage also lautet: Wie gebe ich die anderen Spalten aus, wenn meine Anfrage wie folgt lautet?
SELECT DISTINCT points FROM TABLE
Diese Anfrage gibt mir zwar die verschiedenen Punkte aus, aber ich erhalte auf die Nachbarspalten keine Ausgabe.
SELECT DISTINCT points, (plus die anderen spalten) FROM TABLE ???
Beispiel:
id | points | ... | timestamp
-----------------------------------
1 | Pkt01 | ... | 32324
2 | Pkt01 | ... | 43322
3 | Pkt02 | ... | 1122
--> Ausgabe:
2 | Pkt01 | ... | 43322
3 | Pkt02 | ... | 1122
Hallo
Ich will als Ausgabe das "DISTINCT":
Pkt01, Pkt02, Pkt03, Pkt04, Pkt05, ...Die Sortierung ist nicht so das Problem, denn die untersten Einträge sind immer am neusten. Die Frage also lautet: Wie gebe ich die anderen Spalten aus, wenn meine Anfrage wie folgt lautet?
wie üblich mit einer korrelierten Unterabfrage.
Beispiel:
id | points | ... | timestamp
1 | Pkt01 | ... | 32324
2 | Pkt01 | ... | 43322
3 | Pkt02 | ... | 1122--> Ausgabe:
2 | Pkt01 | ... | 43322
3 | Pkt02 | ... | 1122
Ja, das kommt hin.
Achso: DISTINCT kommt dann in der Abfrage nicht mehr vor :-)
Freundliche Grüße
Vinzenz
Leider helfen mir die Unterabfragen nicht weiter, da ich die SQL Anfrage unter einem DBD::CSV DBI Treiber in Perl durchführe und da nur eingeschränkte SQL Anfragen möglich sind. http://search.cpan.org/~jzucker/DBD-CSV-0.21/lib/DBD/CSV.pm
Da muss ich wohl eine Funktion zum manuellen Überprüfen schreiben...
Oder gibt es noch andere Wege?
Hallo Bastian,
Leider helfen mir die Unterabfragen nicht weiter, da ich die SQL Anfrage unter einem DBD::CSV DBI Treiber in Perl durchführe und da nur eingeschränkte SQL Anfragen möglich sind.
mein Beileid. Ich möchte Dir deswegen raten, bei Datenbankfragen den zusätzlich
eingeblendeten Hinweis auf das verwendete DBMS (inkl. Versionsangabe) nicht zu
ignorieren.
Da muss ich wohl eine Funktion zum manuellen Überprüfen schreiben...
Das fürchte ich auch.
Freundliche Grüße
Vinzenz