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