Die nächsten Geburtstage auslesen

casr

Mitglied
Hallo Forum

Ich habe eine Mitgliederliste in welcher die Geburtstage in folgendem Format vorliegen: '1960-05-19'.

Nun brauche ich ein Select-Statement, welches mir die nächsten 5 Geburtstagskinder ausgibt, oder auch alle, sortiert nach Dauer bis Geburtstag.

Kann mir wer auf die Sprünge helfen?

Gruss und Dank

DB ist MySQL 4.1.11
 
Zuletzt bearbeitet:
Hi,
ein einfaches "order by [Spaltenname] am Ende des Statements sollte ausreichen um es zu sortieren.
Beispiel:
Select * from tblDatum order by Geburtstag

Gruß
 
Na ich glaube da machst du es dir ein wenig zu einfach.

Wenn ich das so machen würde, dann käme immer der/die älteste zu oberst. Logisch eigentlich. Was ich aber will ist, dass unabhängig vom Geburtsjahr, das nächste "Geburtstagskind" als erstes kommt.

Bsp: wenn heute der 26.09.2005 ist, dann sollte Hans, der am 27.09.1975 Geburtstag hat als erstes Zeile zürück gegeben werden, und zwar vor Martha die am 28.09.1969 Geburtstag hat. Danach sollte Max der am 29.09.2001 geboren ist kommen, usw.
 
Hi,
ok.. verstehe. Dann musst du mittels Date_Format das Jahr "ausblenden".
Beispiel:
order by Date_format([Spaltenname], '%m-%d').
jetzt würde nur nach Monat und eben anschließend nach Tag sortiert werden.

Gruß
 
Ok danke, das funktioniert ja schon ganz gut. Hast du gerade auch noch einen "Trick" auf Lager, wie ich noch die nächsten 5 ab "heute" zuerst kriege, so dass es auch gegen Jahreswechsel hin funktioniert?
 
Schau mal bei der folgenden Seite vorbei:
http://dev.mysql.com/doc/mysql/de/date-calculations.html
Sie können die Anfrage sogar so schreiben, dass sie unabhängig davon funktioniert, was der aktuelle Monat ist. Auf diese Art brauchen Sie keine bestimmte Monatszahl in der Anfrage benutzen. DATE_ADD() erlaubt Ihnen, einem gegebenen Datum ein Zeitintervall hinzuzufügen. Wenn Sie dem Wert von NOW() einen Monat hinzufügen und dann den Monatsanteil mit MONTH() extrahieren, ergibt das den Monat, der die kommenden Geburtstage enthält:

mysql> SELECT name, geburtstag FROM pet
-> WHERE MONTH(geburtstag) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
 
So in der Art hab ich das Problem auch angegangen. Der Hund steckt mal wieder im Detail; Wenn ich Mitte Dezember die Geburtstagskinder des nächsten Monats anzeigen lasse, dann kommen zuerst die im Januar, und dann erst die im Dezember, da ich ja logischerweise nach Monate-Tag sortiere...
 
Hi,
hm... also mit einer Abfrage dürfte das schwierig werden. Ich seh jetzt zumindest auf Anhieb keinen Lösungsweg. Wozu benötigst du das denn? Wenn du auch mehrer Abfragen absetzen kannst dann solltest du das vielleicht über den Weg probieren. Du könntest dann noch Bedingungen einsetzen. Heißt du prüfst auf ein fixes Jahr ab und lässt nur die Geburtstage ausgeben die nach dem aktuellen Datum liegen. Wenn das aktuelle Datum bereits im November liegt oder so startest du eine zweite Abfrage die erst im nächsten Jahr beginnt und die Ergebnisse quasi dranhängt.
Ich kenne jetzt dein Anwenungsgebiet nicht genau, von daher weiß ich auch nicht ob dich das weiterbringt.

Gruß
 
Zurück