MySQL-Tabelle filtern

Hallo,

ich komme irgendwie nicht drauf, wie ich folgendes Problem möglichst elegant lösen kann…

Angenommen ich habe so eine Tabelle:

Nr. IP Browser Zeit

001 1.2.3.4 FF 14:16:00
002 1.2.3.4 IE 14:16:12
003 2.3.4.5. FF 14:17:19
004 1.2.3.4 FF 14:20:00
005 1.2.3.4 FF 14:20:12

Und ich möchte jetzt als Ergebnis bei den Datensätzen, bei denen IP und Browser gleich sind, jeweils nur den neuesten Eintrag haben.

Im Beispiel wären das also die Zeilen nummer 5, 3 und 2.
4 und 1 sollen also unterdrückt werden, da sie bei gleicher IP und Browser (dies hier nur als Beispiel, können ja auch andere Werte sein) sozusagen „veraltet“ sind.

Kann mir jemand weiterhelfen?

Viele Grüsse aus Hannover,

Thorsten

Hi Thorsten,
in Oracle würde ich das sinngemäß so machen (ungetestet):

select
 t1.\*
from
 tabelle t1,
 (
 select
 ip
 ,browser
 ,max(zeit) as maxzeit
 from 
 tabelle
 group by
 ip
 ,browser
 ) t2
where
 t1.ip = t2.ip
 and t1.browser = t2.browser
 and t1.zeit = t2.maxzeit; 

Natrülich muß man dabei auch ein paar Dinge beachten: Was soll passieren, wenn evtl. mehrere Eintraege mit derselben Maxzeit zu einer Kombination (IP, Browser) vorhanden sind? Gibt es NULL-Eintraege?

Kann MySQL überhaupt mit solchen SUBSELECTs umgehen?

gruss
bernhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

wenn man sicher ist, daß die Nr. fortlaufend (oder wenigsten monoton steigend) vergeben wird, wird es viel einfacher, also quasi nur das Subselect:

select max(nr), ip, browser, max(zeit) from Tabelle group by ip, browser;

Gruß, muzel