Grosses problem mit max() in SQL abfrage

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!

Viele Grüsse
Dirk

Hallo.

zwar denke ich nicht, dass mir jemdand helfen kann, aber ein
Versuch ist trotzdem wert:

Vielleicht doch: http://www.entwickler-forum.de -> Datenbanken -> MySQL -> ‚Problem mit MAX()‘ …oder vielleicht ein anderer Beitrag ?

HTH
mfg M.L.

***YAHOO: Dumme Männer schlafen besser :smiley:***
http://de.news.yahoo.com/050524/295/4jzv2.html
http://jech.bmjjournals.com/ & http://www.who.int/en/
Werbung f. Datenbanken: http://www.datenbank-spektrum.de/archiv.html

IN-Operator und Subquery
Hallo Dirk,

Lösung wie folgt:

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.

Grüße,
Bernhard

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

Alexander

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]

Ob der IN-Operator in MySQL verfügbar ist weiß ich nicht, mit
einer Oracle-DB fuktioniert die obige Query.

Grüße,
Bernhard

Danke, geht aber leider nicht!
Gruss
Dirk

Hi!

Schon mal mit einer View a la „select artikel,maxn(datum) from tabelle“ versucht? (Ein Subquery ist im Prinzip nix anderes als eine View)

Grüße,
Tomh

PS: Falls es Views in MySQL überhaupt gibt

Hallo !

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…

Alexander