Die höchste ID oder den höchsten Timestamp einer Gruppe wählen

Hallo,

ich bin verzweifelt, weil ich für meine Übungsaufgabe keine Lösung finde.
Evtl. kann mir ja jemand mit mehr Wissen helfen.

Ich benutze MySQL 4.1.15

Ich möchte mir aus 2 Tabellen Daten liefern lassen,
wobei ich aus Tabelle 2 "ak_tabelle1", nur den letzten Eintrag einer
Gruppe (gruppiert nach "fld_firmid") haben möchte.

Aus Tabelle 1 "firmen" möchte ich mir nur den zu "fld_firmid" gehörenden Namen geben lassen.

Tabelle 1 wäre "firmen"

fld_id | fld_firma | .........
--------|--------------|
1 | firma1 |
2 | firma2 |
3 | firma3 |

Tabelle 2 wäre "ak_tabelle1"

fld_akid | fld_firmid | fld_time | .........
-----------|--------------|----------------------------|
1 | 1 | 20060411163053 |
2 | 1 | 20060411163104 |
3 | 1 | 20060412093514 |
4 | 3 | 20060413084027 |
5 | 3 | 20060413093320 |
6 | 2 | 20060413102030 |


Ich wünsche mir also denn diese Daten

3, 1, firma1, 20060412093514,
5, 3, firma3, 20060413093320,
6, 2, firma2, 20060413102030,


Mit dieser Abfrage bekomme ich jedoch nicht die Zeilen mit dem jeweils höchstem Wert zurück!

$sql="SELECT MAX(ak.fld_akid), ak.fld_firmid, fm.fld_firma, ak.fld_time FROM ak_tabelle1 AS ak, firmen AS fm WHERE ak.fld_firmid = fm.fld_id GROUP BY ak.fld_firmid";
$result=mysql_query($sql, $db_connection);


Und auch das funktioniert nicht!

$sql="SELECT ak.fld_akid, ak.fld_firmid, ak.fld_time, fm.fld_firma FROM ak_tabelle1 AS ak, firmen AS fm WHERE fld_akid = (SELECT MAX(fld_akid) FROM ak_tabelle1) AND ak.fld_firmid = fm.fld_id GROUP BY fld_firmid";
$result=mysql_query($sql, $db_connection);


Evtl. kann mir ja jemand bei meinem Problem helfen.
Danke und Gruß
 
HTML:
SELECT ak.fld_akid, ak.fld_firmid, bk.fld_time, fm.fld_firma
FROM ak_tabelle1 AS ak
JOIN firmen AS fm ON ak.fld_firmid = fm.fld_id
LEFT JOIN ak_tabelle1 AS bk ON fm.fld_id = bk.fld_firmid
AND ak.fld_time < bk.fld_time
WHERE bk.fld_akid IS NULL
ORDER BY ak.fld_akid

Vllt so ?
 
Wow,

das funktioniert.
Ich verbeuge mich respektvoll und bedanke mich.

Hättest Du evtl. noch die Güte mir die Abfrage zu erläutern?


Danke und Gruß
 
Hi

kannst dir ja mal was über JOINS lesen z.B. hier

Ich kanns grob erklären also ein JOIN Befehl nimmt den bisherigen Query mit in eine andere Tabelle und schließt Ergebnise aufgrund des ON Befehls welches dem WHERE übergeordnet ist aus.
Wenn ich falsch liege korrigiert mich.
D.h. also aufgrund des Bezeichners z.B. ak werden die Ergebnisse, in deinem Beispiel nach der Tabelle firmen getragen sofern sie der ON Bedingung zustimmen :p

Diese Abfrage eignet sich z.B. für ein Forum um Threads nach der Aktualität zu ordnen, daher habe ich die Abfrage auch und mir wurde hier dabei auch geholfen, leider habe ich vergessen wofür die letzte Anweisung ist ( IS NULL ).

Ansonsten eigenen sich JOIN Befehle immer gut um zusammenzufassen.
 
Zurück