Auteur Sujet: formule SQL pour chercher l'âge de toute une base ?  (Lu 20749 fois)

plus minus reset

0 Membres et 1 Invité sur ce sujet

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« le: 22 Janvier 2008 à 17:19:05 »

Bonjour à tous  :grin:

J'aimerais afficher les âges de tous les individus de ma base

J'ai trouvé cette formule dans la requête SQL BOA :

PROC_AGE_INDIVIDU(I_CLEF)

Comment mettre (et où ) ce qui indiquera à la formule tous les individus : normalement I_CLEF indique l'individu (ex 906 si mon numéro NIP est 906) mais que faire pour indiquer TOUS les individus ?

Merci  :wink:
 

Hors ligne Facon

formule SQL pour chercher l'âge de toute une base ?
« Réponse #1 le: 22 Janvier 2008 à 17:45:26 »
Bonsoir,
J'ai deux réponses:
 :arrow: S'il s'agit d'afficher l'âge détaillé dans la fiche individu, il faut passer par le menu Configuration, Visuels est cocher "Afficher l'âge détaillé dans la fiche individu";
 :arrow: Au travers du menu Individus, Anniversaires... tu as l'âge courant de tous les individus ainsi que la date anniversaire. Cet affichage se fait pour le mois en cours mais tu peux changer le mois à ta convenance.
Le même affichage se fait par défaut pour les "Vivants", tu peux étendre l'affichage à "Tous"
Christian
 

Hors ligne Roger 1

  • AncestroExpert
  • *****
  • Messages: 627
formule SQL pour chercher l'âge de toute une base ?
« Réponse #2 le: 22 Janvier 2008 à 18:13:12 »
PROC_AGE_INDIVIDU retourne l'âge en jours
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« Réponse #3 le: 22 Janvier 2008 à 18:27:08 »
Merci à tous les deux  :wink: mais si PROC_AGE_INDIVIDU retourne l'âge en jour quelle est la formule pour ce que je veux faire ? Afficher les âges de tous les individus de ma base...
 

Hors ligne Facon

formule SQL pour chercher l'âge de toute une base ?
« Réponse #4 le: 22 Janvier 2008 à 20:30:09 »
Bonsoir,
Dans ce cas là il faudrait préciser ta demande pour tenter d'y apporter une réponse. Est-ce au niveau de l'affichage dans Ancestrologie, est-ce un état séparé, est-ce autre chose?

L'âge change sans arrêt, à quel moment souhaites-tu connaître l'âge des individus de ta base?
Christian
 

mpl75

  • Invité
formule SQL pour chercher l'âge de toute une base ?
« Réponse #5 le: 22 Janvier 2008 à 20:34:08 »
Citer
L'âge change sans arrêt

C'est comme l'heure

Hein  :?:  :mrgreen: OK je sors  :roll:
 

Hors ligne Roger 1

  • AncestroExpert
  • *****
  • Messages: 627
formule SQL pour chercher l'âge de toute une base ?
« Réponse #6 le: 22 Janvier 2008 à 21:29:09 »
Je pense que ce que veut "palimpseste" , c'est l'âge à un instant T de l'ensemble des individus, quitte à créer comme dans proc_age_individu une date de décès fictive qui correspond à l'instant de l'interrogation et qui retourne l'âge en années.
Bon, je vais bosser mon sql :evil: :evil: :grin:
A+
 

Hors ligne DDdeBerdeux

formule SQL pour chercher l'âge de toute une base ?
« Réponse #7 le: 22 Janvier 2008 à 23:07:13 »
Bonsoir,select nom
      ,prenom
      ,(select age/365.24 from proc_age_individu(cle_fiche)) as age_en_annees
from individu
where kle_dossier =1
order by nom,prenom
changer le 1 de dossier si nécessaire.
Mais attention, il y a quelques surprises, surtout si vous n'avez pas déclaré le décès de votre ancêtre de 1600...
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« Réponse #8 le: 23 Janvier 2008 à 00:18:33 »
Bonsoir  :wink:

Roger a raison c'est bien cela que je cherche : quel âge ont tous les individus de ma base aujourd'hui

Concernant la solution de DD que je remercie quand le lance sa requête, j'obtiens cette erreur :

Dynamic SQL error
SQL error code = 104
Token unknown-line1, column 8
select

Qu'est-ce qui ne va pas ?  ???
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« Réponse #9 le: 23 Janvier 2008 à 00:26:22 »
Mille excuses c'était de ma faute j'avais saisi 2 fois select en début de formule  :oops:

ça marche très bien, merci encore DD  :wink:
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« Réponse #10 le: 23 Janvier 2008 à 14:32:43 »
Bonjour DD,  :wink:

Je reviens sur ta réponse d'hier sur la requête "âge"

Avec ta solution on obtient des années et des décimales pour les mois :

ex 1, 31 ou 4, 4 ou 2, 38)

(1, 31 correspond à 1 an 3 mois et 24 jours
2, 38 correspond à 2 ans 4 mois et 18 jours
4, 4  correspond à 4 ans 4 mois et  29 jours)

Est-il possible en modifiant la formule, d'obtenir ce type de réponse : l'année, les mois, (les jours) dans les résultats de cette requête plutôt qu' un chiffre avec décimale ?

Merci



 

Hors ligne DDdeBerdeux

formule SQL pour chercher l'âge de toute une base ?
« Réponse #11 le: 23 Janvier 2008 à 17:19:47 »
Bonjour,
La procédure PROC_AGE_INDIVIDU donne un âge en jours. Mais avant toute chose, j'attire votre attention sur la précision relative de cet âge.
Il ne peut être juste que si la date de naissance et la date de décès exactes sont connues. En l'absence de l'événement décès, c'est la date du jour qui est utilisée (ce qui explique le nombre de centenaires que vous devez trouver :smile:).
Lorsque les dates ne sont pas complètes, les approximations suivantes sont utilisées:
Si le mois est connu on estime que l'événement a eu lieu le 15 de ce mois. Si seule l'année est connue, on estime que l'événement a eu lieu le 1 juillet de cette année.
Quand la date est exprimée sous forme de période (entre xxxx et xxxx, avant le xxxx) c'est toujours la première des dates qui est prise en compte.
L'âge en jours est donc déjà à considérer avec un certain recul.
En considérant que ce nombre de jours soit exact, sa transformation en années, mois, jours n'est pas si évidente qu'il y paraît.
Transformer un nombre de jours en semaines-jours est simple: il suffit de diviser par 7 pour obtenir la nombre de semaines, le reste de la division donnant le nombre de jours.
Mais pour le transformer en années, sans perdre la précision du jour? Il faudrait connaître le nombre d'années bissextiles qui se sont écoulées entre la naissance et le décès. Le calcul se complique encore si on prend en compte les mois.
Voilà pourquoi le résultat de la PROC_AGE_INDIVU est "traité" en interne avant de l'afficher dans Ancestrologie sous la forme années-mois, (en éliminant au passage les âges improbables), probablement en utilisant pour le calcul une année moyenne de 365.24 jours et un mois de 1/12ième de l'année. La précision de cet affichage étant largement suffisante en regard de la précision de l'âge.
Faire ce calcul dans une requête est sans doûte possible, mais pas simple. Si certains veulent essayer, pour le fun... :smile:
Pour les SQLogues qui veulent s'amuser, au lieu de faire ce calcul directement dans la requête simple présentée ci-dessus, depuis la version 2.0 de Firebird, le langage s'est enrichie d'une structure "Execute block" qui autorise l'écriture de requêtes utilisant des instructions d'habitude réservées aux procédures stockées (comme des conditions et des boucles...). Cette structure est décrite dans les notes de versions (document pdf) accompagnant Firebird.
 
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
formule SQL pour chercher l'âge de toute une base ?
« Réponse #12 le: 23 Janvier 2008 à 23:01:05 »
Merci Maître DD pour cette réponse claire et exhaustive  :wink: