Prolbem mit MAX() und Group by

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