IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

calcul d'une moyenne d'âge


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut calcul d'une moyenne d'âge
    Bonjour,

    j'essaie de calculer la moyenne d'age de toutes les personnes d'une table, à une date antérieure ( le 1er janvier 2000) dans la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select AVG(TO_CHAR(TO_DATE('01-01-2000', 'FXDD-FXMM-YYYY'))-(TO_CHAR(pers_datenaiss, 'DD-MM-RR')))
    FROM PERS;
    et j'obtiens l'erreur :
    ORA-01722: Nombre non valide
    je suppose que c'est la partie du début : TO_CHAR(TO_DATE('01-01-2000', 'FXDD-FXMM-YYYY')) qui pose problème, car j'ai essayé de l'afficher seul et ca n'affiche que les 2 derniers '00' de 2000...

    je ne sais pas si je suis assez clair

    si quelqu’un voit la solution ? (ca fait 2-3 j. que je cherche, et ai même tenté en modifiant NLS_DATE_FORMAT)

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    Bonjour, je pense plutot que c est le Avg(to_char(...)) qui pose probleme.

    Essaie plutot ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Matable as (Select '01-01-1989' Naissance From dual
    Union all Select '01-01-1979' Naissance From dual)
    Select Avg(MONTHS_BETWEEN(TO_DATE('01-01-2000', 'dd-mm-yyyy'), TO_DATE(NAISSANCE, 'dd-mm-yyyy')) / 12) A
      From MATABLE

  3. #3
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Salut,
    tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select 
           avg(floor(months_between(TO_DATE('01-01-2000', 'dd-mm-yyyy'), DateNaissance) /12)) 
    from maTableDePersonnes ;
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par nash1 Voir le message

    je suppose que c'est la partie du début : TO_CHAR(TO_DATE('01-01-2000', 'FXDD-FXMM-YYYY')) qui pose problème, car j'ai essayé de l'afficher seul et ca n'affiche que les 2 derniers '00' de 2000...
    précision
    en fait j'arrive avec seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AVG(2000 - (datenaissance))
    mais j'aimerais avoir la précision au nb. de jours...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Au nombre de jours, c'est le plus simple car c'est la précision de la soustraction d'une date par une autre.

    En limitant aux personnes nées avant l'an 2000 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT avg(date '2000-01-01' - pers_datenaiss) as moyenne_age
      FROM PERS
     WHERE pers_datenaiss < date '2000-01-01';

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Yorglaa Voir le message
    Salut,
    tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select 
           avg(floor(months_between(TO_DATE('01-01-2000', 'dd-mm-yyyy'), DateNaissance) /12)) 
    from maTableDePersonnes ;
    Oui ca passe bien même en testant la précision au nbre de jours (naissance le 31 decembre ou 2 janvier...)! Merci beaucoup

  7. #7
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Mais pas de soucis
    un p'tit "Résolu" alors ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul d'une moyenne
    Par Doobi dans le forum Excel
    Réponses: 3
    Dernier message: 07/06/2007, 11h30
  2. [MySQL] Calcul d'une moyenne pondérée
    Par BertMont dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/06/2007, 09h49
  3. Calcul d'une moyenne pondérée
    Par solorac dans le forum Excel
    Réponses: 1
    Dernier message: 21/05/2007, 16h54
  4. [Tableaux] Calcul d'une moyenne à partir d'un tableau
    Par Mordanus dans le forum Langage
    Réponses: 13
    Dernier message: 09/05/2007, 18h03
  5. requete sql : calcul d'une moyenne
    Par timide94 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/01/2007, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo