Prolbem mit MAX() und Group by
am 13.01.2007 17:02:23 von Swenja Schorp
Hallo,
Gegeben ist folgende Tabelle:
Pers_id | time_stamp | nummer
---------------------------
1 | 1001 | 3
1 | 1000 | 5
2 | 2000 | 1
2 | 2004 | 2
Folgendes Ergebnis soll eine Abrage liefern:
Pers_id | time_stamp | nummer
---------------------------
1 | 1001 | 3
2 | 2004 | 2
Also ausformuliert: Zu jeder Person das Tuple mit dem höchsten Timestamp.
Verwendetes Datenbanksystem ist mysql 5.0.21
Ich hab schon sämmlich Varianten mit Group By, Having und MAX
ausprobiert komme aber ohne die Verwendung von Unterabfragen einfach
nicht auf das Ergebnis oben. (Das Problem habe ich nur mit MySQL, mit
MSSQL geht es mit einer Kombination aus Group by und der MAX-Funktion)
Vielen Dank für Eure Antworten.
Re: Prolbem mit MAX() und Group by
am 13.01.2007 17:27:47 von Helmut Chang
Swenja Schorp schrieb:
> Hallo,
>
> Gegeben ist folgende Tabelle:
>
> Pers_id | time_stamp | nummer
> ---------------------------
> 1 | 1001 | 3
> 1 | 1000 | 5
> 2 | 2000 | 1
> 2 | 2004 | 2
>
> Folgendes Ergebnis soll eine Abrage liefern:
>
> Pers_id | time_stamp | nummer
> ---------------------------
> 1 | 1001 | 3
> 2 | 2004 | 2
>
> Also ausformuliert: Zu jeder Person das Tuple mit dem höchsten Timestamp.
gruss, heli
Re: Prolbem mit MAX() und Group by
am 13.01.2007 17:28:45 von dnoeth
Swenja Schorp wrote:
> Pers_id | time_stamp | nummer
> ---------------------------
> 1 | 1001 | 3
> 1 | 1000 | 5
> 2 | 2000 | 1
> 2 | 2004 | 2
>
> Folgendes Ergebnis soll eine Abrage liefern:
>
> Pers_id | time_stamp | nummer
> ---------------------------
> 1 | 1001 | 3
> 2 | 2004 | 2
>
> Also ausformuliert: Zu jeder Person das Tuple mit dem höchsten Timestamp.
>
> Verwendetes Datenbanksystem ist mysql 5.0.21
>
> Ich hab schon sämmlich Varianten mit Group By, Having und MAX
> ausprobiert komme aber ohne die Verwendung von Unterabfragen einfach
> nicht auf das Ergebnis oben. (Das Problem habe ich nur mit MySQL, mit
> MSSQL geht es mit einer Kombination aus Group by und der MAX-Funktion)
Und warum nimmst du dann nicht diese Abfrage?
Deine MySQL-Version kann Subqueries/Derived Tables.
Wird wohl das gewesen sein:
select t.*
from tab as t join
(select pers_id, max(time_stamp) as max_ts
from tab
) as dt#
on t.pers_id = dt.pers_id
and t.time_stamp = max_s
Dieter