Seite 1 von 1

[gelöst] Altersberechnung aus Geburtstag falsch

Verfasst: So, 24.06.2012 20:21
von Yaddayadda
Hallo,

ich lasse mir mit einer Abfrage aus dem in einer Tabelle gespeicherten Geburtsdatum das Alter berechnen. Dazu benutze ich die Formel

Code: Alles auswählen

CASEWHEN( DAYOFYEAR( [Geburtsdatum] ) > DAYOFYEAR( CURDATE( ) ), DATEDIFF( 'year', [Geburtsdatum], CURDATE( ) ) - 1, DATEDIFF( 'year', [Geburtsdatum], CURDATE( ) ) )
Leider liefert die Abfrage falsche Ergebnisse, wenn der Geburtstag auf den aktuellen Tag folgt. Also Geburtstag 25.6.2010, aktuelles Datum 24.6.2012, sprich das Kind wird am nächsten Tag 2 Jahre alt, ist aber noch 1 Jahr alt. Die obige Abfrage liefert mir jedoch den Wert "2".

Das gleiche passiert übrigens, wenn ich mit der Formel

Code: Alles auswählen

( DATEDIFF( 'dd', "Geburtstag", CURDATE( ) ) ) / 365,25
rechne.

Was muss ich tun, um eine korrekte Berechnung zu erhalten?

Vielen Dank,
yaddayadda

Re: Altersberechnung aus Geburtstag falsch

Verfasst: So, 24.06.2012 21:06
von RobertG
Der Fehler liegt im Schaltjahr begründet.
Schau einmal im LO-Base-Handbuch nach. Da habe ich das genauer beschrieben:
http://wiki.documentfoundation.org/imag ... en_V35.pdf

Gruß

Robert

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 09:02
von Yaddayadda
RobertG hat geschrieben:Der Fehler liegt im Schaltjahr begründet.
Schau einmal im LO-Base-Handbuch nach. Da habe ich das genauer beschrieben:
http://wiki.documentfoundation.org/imag ... en_V35.pdf

Gruß

Robert
Danke, so ist die Berechnung endlich korrekt. :-)
Allerdings habe ich nun das Problem, dass die Alters-Mittelwerte (bezogen auf die Gruppenzugehörigkeit) nicht mehr richtig berechnet werden. Das hat vorher geklappt, aber nun erhalte ich nur ganze, gerundete(?) Zahlen statt Zahlen mit 1 Nachkommastelle. Also z.B. 5 statt richtigerweise 5,5 oder 3 statt 2,8.
Wo muss ich das Format entsprechend einstellen, dass die Mittelwerte wieder richtig berechnet werden?

Nochmals danke,
Gruß, yaddayadda

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 12:27
von RobertG
Yaddayadda hat geschrieben: Allerdings habe ich nun das Problem, dass die Alters-Mittelwerte (bezogen auf die Gruppenzugehörigkeit) nicht mehr richtig berechnet werden. Das hat vorher geklappt, aber nun erhalte ich nur ganze, gerundete(?) Zahlen statt Zahlen mit 1 Nachkommastelle. Also z.B. 5 statt richtigerweise 5,5 oder 3 statt 2,8.
Wo muss ich das Format entsprechend einstellen, dass die Mittelwerte wieder richtig berechnet werden?
Die Berechnung wird vermutlich weiterhin korrekt sein. Hast Du einmal das Zahlenformat eingestellt? (Nachkommastellen).
Wie berechnest Du die Mittelwerte?

Gruß

Robert

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 13:09
von Yaddayadda
RobertG hat geschrieben:
Yaddayadda hat geschrieben: Allerdings habe ich nun das Problem, dass die Alters-Mittelwerte (bezogen auf die Gruppenzugehörigkeit) nicht mehr richtig berechnet werden. Das hat vorher geklappt, aber nun erhalte ich nur ganze, gerundete(?) Zahlen statt Zahlen mit 1 Nachkommastelle. Also z.B. 5 statt richtigerweise 5,5 oder 3 statt 2,8.
Wo muss ich das Format entsprechend einstellen, dass die Mittelwerte wieder richtig berechnet werden?
Die Berechnung wird vermutlich weiterhin korrekt sein. Hast Du einmal das Zahlenformat eingestellt? (Nachkommastellen).
Wie berechnest Du die Mittelwerte?
Ich lasse die Mittelwerte mit folgender Abfrage berechnen:

Code: Alles auswählen

SELECT AVG( "Alter" ) AS "Durchschnitt", "Gruppe", COUNT( "Nachname" ) AS "Alter / Gruppe" FROM "Altersberechnung" GROUP BY "Gruppe" ORDER BY "Gruppe" ASC
Wie gesagt, bis zu der Änderung der Formel für die Altersberechnung hat alles geklappt. Nun ist zwar das Alter endlich korrekt, aber die Mittelwerte nicht mehr. *seufz*

Wo stelle ich denn die Nachkommastellen ein? Habe es über "Spaltenformat" probiert, aber alles was ich dort einstelle ist beim nächsten Ausführen der Abfrage wieder vergessen.

Gruß,
yaddayadda

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 17:14
von F3K Total
Hallo,
versuch es mal mit

Code: Alles auswählen

SELECT AVG(convert ("Alter", DOUBLE)) AS "Durchschnitt", "Gruppe", COUNT( "Nachname" ) AS "Alter / Gruppe" FROM "Altersberechnung" GROUP BY "Gruppe" ORDER BY "Gruppe" ASC
oder

Code: Alles auswählen

SELECT AVG(cast ("Alter" as DOUBLE)) AS "Durchschnitt", "Gruppe", COUNT( "Nachname" ) AS "Alter / Gruppe" FROM "Altersberechnung" GROUP BY "Gruppe" ORDER BY "Gruppe" ASC
Gruß R

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 17:43
von Yaddayadda
F3K Total hat geschrieben:Hallo,
versuch es mal mit

Code: Alles auswählen

SELECT AVG(convert ("Alter", DOUBLE)) AS "Durchschnitt", "Gruppe", COUNT( "Nachname" ) AS "Alter / Gruppe" FROM "Altersberechnung" GROUP BY "Gruppe" ORDER BY "Gruppe" ASC
Gruß R
Damit klappt es wieder. Vielen Dank. Kannst du mir vielleicht noch erklären, was dieses (convert ("Alter", DOUBLE)) bewirkt?

Gruß, yaddayadda

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 17:50
von F3K Total
... nun, es konvertiert die Zahl "Alter" in eine double precision Zahl.
Ob es da auch noch andere mögliche Zahlentypen gibt, kann ich nicht sagen, habe es selbst durch try and error herausgefunden.
Gruß R

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 20:21
von RobertG
Die Datentypen findest Du im Base-Handbuch - Anhang. DOUBLE ist ein Zahlentyp, der nicht unbedingt exakt ist - macht sich bei Deinen Berechnungen aber nicht bemerkbar, da die Begrenzung bei 15 Nachkommastellen und 8 Byte Speicherbedarf festgelegt ist.

Gruß

Robert

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 20:30
von Yaddayadda
F3K Total hat geschrieben:... nun, es konvertiert die Zahl "Alter" in eine double precision Zahl.
Ob es da auch noch andere mögliche Zahlentypen gibt, kann ich nicht sagen, habe es selbst durch try and error herausgefunden.
Gruß R
Aha. Da wär ich als Anfänger natürlich nie drauf gekommen, dass es damit dann wieder funktioniert. Insofern nochmal vielen Dank!

Habe aber noch zwei andere Fragen, vielleicht kannst du mir da ja auch helfen.

Wieso kann ich bei der Altersberechnung kein Kriterium angeben? Sobald ich eine Abfrage erstelle und im Feld "Alter" ein Kriterium angebe, z.B. > 4 weil ich alle Kinder aufgelistet haben will, die älter als 4 Jahre sind, bekomme ich nur immer einen Syntax-Error in SQL-Expression.

Das zweite Problem ist, dass ich falsche Alterswerte und mehrfach doppelte Ergebnisse erhalte, sobald ich in einer Abfrage das Feld "Alter" hinzufüge. Ich möchte z.B. alle Kinder auflisten, die älter als 4 Jahre sind und nicht in der Vorschulgruppe sind. Dazu nehme ich diese Abfrage:

Code: Alles auswählen

SELECT "Stammdaten"."Nachname", "Stammdaten"."Vorname", "Stammdaten"."Gruppe", "Stammdaten"."Vorschulkind", "Altersberechnung"."Alter" FROM "Altersberechnung", "Stammdaten" WHERE "Stammdaten"."Vorschulkind" = FALSE
Vorschulkind ist dabei ein Ja/Nein (Boolean)-Feld. Das Alterskriterium kann ich wie gesagt gar nicht angeben ohne dass es zu einem Fehler kommt. Doch selbst ohne Altersbeschränkung klappt es nicht. Meine Datenbank enthält derzeit 12 Datensätze, doch ich erhalte bei der obigen Abfrage 41 Einträge mit Mehrfachnennungen und total falschen Alterswerten. Was läuft hier falsch?

Gruß,
yaddayadda

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 21:32
von RobertG
Wie greifst Du auf die Altersberechnung zu? Ich würde die gesamte Berechnung des Alters sicherheitshalber als Ansicht abspeichern und damit dann weiter arbeiten.

Gruß

Robert

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Mo, 25.06.2012 22:27
von F3K Total
Hi,
kann nicht klappen, du greifst auf zwei Tabellen zu, ohne das es eine Beziehung zwischen den beiden gibt:

Code: Alles auswählen

... from "Altersberechnung", "Stammdaten" ...
Also werden alle möglichen Kombinationen erzeugt.
Wenn Du einen Primärschlüssel, z.B. "ID", hast, den du in die View "Alterberechnung" übernimmst, geht es z.B. so:

Code: Alles auswählen

SELECT "Stammdaten"."Nachname", "Stammdaten"."Vorname", "Stammdaten"."Gruppe", "Stammdaten"."Vorschulkind", "Altersberechnung"."Alter" FROM "Altersberechnung", "Stammdaten" WHERE "Stammdaten"."ID" = "Altersberechnung"."ID" and "Altersberechnung"."Alter" > 4
Oder du schaffst eine eindeutige Zuordnung über "Nachname" und "Vorname", die dann aber in der View "Altersberechnung" vorkommen müssen ...

Code: Alles auswählen

SELECT "Stammdaten"."Nachname", "Stammdaten"."Vorname", "Stammdaten"."Gruppe", "Stammdaten"."Vorschulkind", "Altersberechnung"."Alter" FROM "Altersberechnung", "Stammdaten" WHERE "Stammdaten"."Nachname" = "Altersberechnung"."Nachname" and "Stammdaten"."Vorname" = "Altersberechnung"."Vorname" and "Altersberechnung"."Alter" > 4
oder, oder , oder ...

Einfache wäre es, wenn Du die DB, ggf. verfremdet, hier mal hochladen würdest.
Gruß R

Re: Altersberechnung aus Geburtstag falsch

Verfasst: Di, 26.06.2012 08:52
von Yaddayadda
F3K Total hat geschrieben:Hi,
kann nicht klappen, du greifst auf zwei Tabellen zu, ohne das es eine Beziehung zwischen den beiden gibt:

Code: Alles auswählen

... from "Altersberechnung", "Stammdaten" ...
Also werden alle möglichen Kombinationen erzeugt.
Wenn Du einen Primärschlüssel, z.B. "ID", hast, den du in die View "Alterberechnung" übernimmst, geht es z.B. so:

Code: Alles auswählen

SELECT "Stammdaten"."Nachname", "Stammdaten"."Vorname", "Stammdaten"."Gruppe", "Stammdaten"."Vorschulkind", "Altersberechnung"."Alter" FROM "Altersberechnung", "Stammdaten" WHERE "Stammdaten"."ID" = "Altersberechnung"."ID" and "Altersberechnung"."Alter" > 4
Gruß R
Und wieder hast du mein Problem gelöst, tausend Dank! :D