SQL Abfrage

Hallo,

ich hoffe ich habe das richtige Forum erwischt :P Ich brauche einmal eure Hilfe bei einer kniffeligen SQL Abfrage.

Ich habe 2 Tabellen, die erste Tabelle "dataset" die Datensätze enthällt und die Tabelle "dataset_log" die Logdaten zu jedem einzelnen Datensatz hat.

Ich möchte jetzt eine Abfrage erstellen mit der ich jedes dataset bekomme und den letzten zum dataset gehörenden Logeintrag. Eine weitere Einschränkung ist, dass es sich nur um datasets handeln soll für die der Account "100" einträge gemacht hat.

meine Abfrage sieht zur Zeit so aus:

SELECT * FROM dataset ds LEFT JOIN dataset_log dsl ON ds.datasetID = dsl.datasetID WHERE dsl.accountID = '100' GROUP BY dsl.datasetID ORDER BY dsl.time desc

Das Problem ist, dass er durch das GROUP BY nicht den letzten zugehörigen Eintrag zum dataset anzeigt sondern scheinbar irgend einen.

Ich hoffe ihr könnt mir helfen.
 
Das "Group By" sollte eigentlich unnötig sein. Du willst schließlich nur den Letzen Eintrag.
Probier mal das:

SELECT * FROM dataset ds LEFT JOIN dataset_log dsl ON ds.datasetID = dsl.datasetID WHERE dsl.accountID = '100' ORDER BY dsl.time desc LIMIT 1
 
Ne leider nicht, ich möchte nicht nur einen Eintrag sondern eine Auflistung der datasets mit einer Spalte, die den Wert des letzten Logeintrags enthällt.
 
Probier's mal so:
Code:
SELECT *
FROM dataset ds, dataset_log dsl
WHERE ds.datasetID = dsl.datasetID
AND dsl.accountID = '100'
AND dls.time = (
  SELECT MAX(time)
  FROM dataset_log l
  WHERE l.datasetID = dsl.datasetID
  AND l.accountID = '100'
  )
ORDER BY dsl.time DESC
mfg, metax.
 
Oder das hier vielleicht

Code:
SELECT * FROM dataset ds 
LEFT JOIN (
   SELECT * FROM dataset_log
   ORDER BY dataset_log.time DESC
) dsl 
ON ds.datasetID = dsl.datasetID
WHERE dataset_log.accountID = 100
GROUP BY dsl.datasetID
 
Zurück
Oben