mySQL " MAX (timestamp)" innerhalb einer Tabelle nur auf bestimmte Sätze beziehe

FlorianM

Grünschnabel
Hallo zusammen,
ich habe folgende Tabellen:

Artikel
Verlauf

id artikelnr name

id artikel_id t_stamp preis

In Verlauf sollen z.B. Preis- und Mengenänderungen gespeichert werden. Jetzt möchte ich immer die aktuellen Preise der Artikel ausgeben und frage daher ein INNER JOIN zwischen Artikel und Verlauf ab:

SELECT artikel.id , artikel.name , artikel.artikelnr , verlauf.preis

FROM artikel
INNER JOIN verlauf
ON artikel.id = verlauf.artikel_id
WHERE verlauf.t_stamp = ( SELECT max(t_stamp) FROM verlauf)"

Mein Problem ist nun, dass bei dieser Abfrage nur der eine Artikel ausgegeben wird der den absolut höchsten Timestamp hat. Wie muss ich die WHERE-Clause formulieren, dass mySQL immer den höchsten Timestamp zu jeder Artikel_id (verlauf.artikel_id) heraus gibt?
 
Zuletzt bearbeitet:
Ich habe doch ncoh eine Frage:

Habe mein Statement folgend umgebaut und bekomme die Meldung:

#1054 - Unknown column 'a.id' in 'on clause'

SQL:
SELECT a.*,v.*, le.*
FROM artikel AS a , verlauf AS v

INNER JOIN (
SELECT artikel_id , menge, MAX(t_stamp) AS max_datum , ek, vk, mwst
FROM verlauf
GROUP BY artikel_id
) AS le
ON a.id  = le.artikel_id
AND v.t_stamp = max_datum

Die Spalte "id" in der Tabelle "Artikel" ist definitiv vorhanden. Kann mir nicht erklären wie die Meldung zusatnde kommt
 
Zuletzt bearbeitet von einem Moderator:
item: Dein inneres SELECT ist sehr unschön. Was genau willst du da ermitteln?
SQL:
SELECT 
	artikel_id, 
	menge, 
	MAX(t_stamp) AS max_datum , 
	ek, 
	vk, 
	mwst
FROM
	verlauf
GROUP BY
	artikel_id
SQL weiss nicht was es mit den Feldern 'menge, ek, vk, mwst' beim Gruppieren machen soll. MySQL ist blöd genug selber annahmen zu treffen - in deinem Fall leider, denn wenn eine Fehlermeldung kommen würde, würdest du da selber sehen was lost ist. MySQL gruppiert automatisch nach allen Feldern die nicht mit Gruppierungsfunktionen behandelt werden. Ergo macht MySQL das folgende draus (und beim Feld menge ist das fast sicher falsch!)
SQL:
SELECT 
	artikel_id, 
	menge, 
	MAX(t_stamp) AS max_datum , 
	ek, 
	vk, 
	mwst
FROM
	verlauf
GROUP BY
	artikel_id, 
	menge, 
	ek, 
	vk, 
	mwst

item: Sind die Tabellen verlauf und artikel bewusst nicht verknüpft?
Das ganze müsste mMn etwa so aussehen
¨
SQL:
SELECT
	a.*,
	v.*
FROM
	artikel a
	INNER JOIN verlauf v
		ON a.id = v.artikel_id
	INNER JOIN (
			SELECT
				artikel_id,
				MAX(t_stamp) AS max_datum
			FROM
				verlauf
			GROUP BY
				artikel_id
		) AS akt_v
		ON v.artikel_id = akt_v.artikel_id
		AND v.t_stamp = akt_v.max_datum
 
Zuletzt bearbeitet von einem Moderator:
Ok, hab dein Statement mal in die Konsole geschmissen und ****t!

Ich dachte ich müsste alle Spalten aus "Verlauf", die mit in die Ergebnistabelle sollen, angeben.
Den Rest muss ich noch weiter studieren, aber danke erstmal.
 

Neue Beiträge

Zurück