Hallo,
zwar denke ich nicht, dass mir jemdand helfen kann, aber ein Versuch ist trotzdem wert:
Ich habe folgende MySQL (keine sub queries) Tabelle:
artikel
author
datum
abc
Ich
2001-01-01
aaa
Ich
2001-01-01
bbb
Ich
2001-01-01
abc
Du
2005-05-05
Daraus moechte ich nun alle Zeilen auslesen, die den neusten Eintrag zu einem Artikel beschreiben.
also in diesem Fall:
artikel
author
datum
aaa
Ich
2001-01-01
bbb
Ich
2001-01-01
abc
Du
2005-05-05
Wie kann ich das machen? Ich hab schon mit allem möglichen wie group, max(), tabelle mit sich selbst joinen usw. rumgespielt, hab aber keine Lösung gefunden.
Das Problem ist, dass ich nicht nur das höchste Datum (max(datum)) will, sondern auch alle anderen Daten in der entsprechenenden Zeile.
Falls mir jemand helfen kann wäre ich ihm SEHR, SEHR dankbar!!!
Acho so, nochwas: Die db ist nicht von mir desingt und ich muss nun aber damit leben. Ich weiss selbst, dass die Tabelle nicht durchdacht ist, kanns aber nicht ändern!
select \*
from table\_artikel
where (artikel, datum) in
(select artikel, max (datum)
from table\_artikel
group by artikel)
Die Sub-Query liefert zu jedem Artikel das Datum des jüngsten Eintrages (das hast Du ja schon herausgefunden). Die übergeordnete Query liefert alle Daten der Artikel-Tabelle.
Ob der IN-Operator in MySQL verfügbar ist weiß ich nicht, mit einer Oracle-DB fuktioniert die obige Query.
Hallo,
zwar denke ich nicht, dass mir jemdand helfen kann, aber ein
Versuch ist trotzdem wert:
Ich habe folgende MySQL (keine sub queries) Tabelle:
Da du keine Subquery willst, bleibt meiner Meinung nach nur:
CREATE TEMPORARY TABLE temp (artikel varchar(255),datum date);
INSERT INTO temp SELECT artikel, MAX(datum) FROM tabelle GROUP BY artikel
SELECT a.* FROM tabelle a, temp b WHERE a.artikel=b.artikel AND a.datum=b.datum
DROP TABLE temp
Hallo,
IMHO kennt MySQL (zuindest meine Version) keine Subqueries.
Eigentlich wollte ich auf temp Tabellen verzichten. Ist das nicht so, dass eine Abfrage wie obige, in der eine temp Tabelle erstellt wird ziemlich lange dauert? (relativ gesehen natürlich)
Vielen Dank
Dirk
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
IMHO kennt MySQL (zuindest meine Version) keine Subqueries.
Eigentlich wollte ich auf temp Tabellen verzichten. Ist das
nicht so, dass eine Abfrage wie obige, in der eine temp
Tabelle erstellt wird ziemlich lange dauert? (relativ gesehen
natürlich)
Naja, ohne tmp. Tabelle musst du das im Client/Programm zwischenspeichern, das ist aber noch langsamer. Temp. Tabellen sind relativ schnell, evtl. noch einmal mit TYPE=HEAP experimentieren. Hatte ich bis jetzt keine Probleme mit. Ich sehe auch keine andere Möglichkeit, wegen dem MAX() und dem erforderlichen GROUP BY geht nunmal kein direkter JOIN in einer Abfrage…