Verschachtelte Min / Max Abfragen

Verschachtelte Min / Max Abfragen

am 07.08.2006 10:51:37 von McAllister

Hallo zusammen,

ich habe ein Problem bei dem ich noch nicht so recht weitergekommen
bin.
Folgende Situation: Ich habe ein Tabelle mit 3 Spalten. In der ersten
stehen Personalnummern und in der zweiten und dritten die Stunde und
Minuten zu Uhrzeiten zu denen die jeweilige Personalnummer aktiv
gewesen ist. Also ungefähr so:
P-Nr. Stunde Minute
P001 7 55
P002 8 0
P001 8 30
P003 9 10
P001 10 43
P002 12 13
P003 13 45

Nun will ich im Idealfall eine Abfrage die als Ergebniss jede
Personalnummer genau einmal mit der frühesten und spätesten
Aktivität ausgibt. Also am besten so:
P-Nr. Min Max
P001 7:55 10:43
P002 08:00 12:13
P003 09:10 13:45

Habe schon einiges ausprobiert, aber bin noch nicht wirklich
weitergekommen. Die Uhrzeit habe ich durch (Stunde * 100 + Minute)
bekommen. Darauf dann die Max / Min - Operation durchgeführt. Wenn ich
in meinen Ideen die Bedingung P-Nr. =3D "P001" eingebe kommen ich schon
in etwa dahin wo ich hinwill. Das Min und Max für P001 wird ausgegeben
(allerdings in 2 Zeilen).
Hat jemand Ideen wie man das ganze umsetzen kann?

Danke und Grüße,
Jan

Re: Verschachtelte Min / Max Abfragen

am 07.08.2006 10:58:00 von Christian Kirsch

McAllister schrieb:
> Hallo zusammen,
>
> ich habe ein Problem bei dem ich noch nicht so recht weitergekommen
> bin.
> Folgende Situation: Ich habe ein Tabelle mit 3 Spalten. In der ersten
> stehen Personalnummern und in der zweiten und dritten die Stunde und
> Minuten zu Uhrzeiten zu denen die jeweilige Personalnummer aktiv
> gewesen ist. Also ungefähr so:
> P-Nr. Stunde Minute
> P001 7 55
> P002 8 0
> P001 8 30
> P003 9 10
> P001 10 43
> P002 12 13
> P003 13 45
>

Was spricht eigentlich dagegen, die in MySQL vorhandenen Datentypen zu
benutzen, in diesem Fall also TIME statt händisch mit Stunden und
Minuten rumzuhampeln?

> Nun will ich im Idealfall eine Abfrage die als Ergebniss jede
> Personalnummer genau einmal mit der frühesten und spätesten
> Aktivität ausgibt. Also am besten so:
> P-Nr. Min Max
> P001 7:55 10:43
> P002 08:00 12:13
> P003 09:10 13:45
>
> Habe schon einiges ausprobiert, aber bin noch nicht wirklich
> weitergekommen. Die Uhrzeit habe ich durch (Stunde * 100 + Minute)
> bekommen. Darauf dann die Max / Min - Operation durchgeführt. Wenn ich
> in meinen Ideen die Bedingung P-Nr. = "P001" eingebe kommen ich schon
> in etwa dahin wo ich hinwill. Das Min und Max für P001 wird ausgegeben
> (allerdings in 2 Zeilen).
> Hat jemand Ideen wie man das ganze umsetzen kann?

Ja - ich würde fast sagen: Schreib einfach hin, was Du haben willst.
SELECT P-Nr, MIN(zeit), MAX(zeit) FROM bla GROUP BY P-Nr

Mehr Informationen zu SELECT, GROUP BY etc. findest Du in der Online
verfügbaren MySQL-Dokumentation unter dev.mysql.com/doc.

Re: Verschachtelte Min / Max Abfragen

am 07.08.2006 11:11:35 von McAllister

Hi Christian,

danke für deine Nachricht. Hat geholfen. Ich habe wohl einfach zu
kompliziert gedacht und den berühmten Wald vor lauter Bäumen nicht
gesehen. Ist eben doch gut wenn sich ein Aussenstehender sowas mal
anschaut. Das ich auf diese einfache Lösung nicht selbst gekommen bin.
*kopfschüttel*

Also nochmal danke und Grüße,
Jan

Re: Verschachtelte Min / Max Abfragen

am 07.08.2006 11:20:49 von Thomas Rachel

McAllister wrote:
^^^^^^^^^^ Hä?


> Folgende Situation: Ich habe ein Tabelle mit 3 Spalten. In der ersten
> stehen Personalnummern und in der zweiten und dritten die Stunde und
> Minuten zu Uhrzeiten zu denen die jeweilige Personalnummer aktiv
> gewesen ist.

Im Handbuch steht unter "Datentypen", welche Datentypen es tatsächlich gibt.
Da ist auch TIME mit dabei...

> Also ungefähr so:
> P-Nr. Stunde Minute
> P001 7 55
> P002 8 0
> P001 8 30
> P003 9 10
> P001 10 43
> P002 12 13
> P003 13 45
>
> Nun will ich im Idealfall eine Abfrage die als Ergebniss jede
> Personalnummer genau einmal mit der frühesten und spätesten
> Aktivität ausgibt. Also am besten so:

> P-Nr. Min Max
> P001 7:55 10:43
> P002 08:00 12:13
> P003 09:10 13:45

Mit GROUP BY kannst Du nach der Personalnummer sortieren, und in diesem Fall
sind dann auch die Aggregatfunktionen MIN() und MAX() einsetzbar.

HTH,

Thomas
--
> Ich habe Deinen alten Account deaktiviert.
wie kannst Du das? Und wer bist, dass Du das kannst?!
(Ursi Jagodic zu Vera Heinau in de.comm.provider.usenet)