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

Langage SQL Discussion :

Evolution d'une population


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Par défaut Evolution d'une population
    Salut à tous,

    je cherche à visualiser l'évolution d'une population dans un groupe de commune sur une période donnée.
    j'ai d'un côté une table des groupes, l'autre une table des communes et leur nombre d'habitant :

    GROUPE { id_groupe, nom }
    COMMUNES { id_commune, nbhab,date }
    GROUPE_COMMUNE { id_groupe,id_commune }

    ex pour COMMUNES :
    1 | 100000 | 2006-02-20
    1 | 250000 | 2006-10-20
    2 | 15000 | 2006-5-15
    2 | 25000 | 2006-9-20

    ex pour GROUPE
    1 | groupe1

    ex pour GROUPE_COMMUNE
    1 | 1
    1 | 2

    je voudrais l'evolution du nombre d'habitant du groupe1 sur la periode (par ex) du 01/02/2006 au 20/11/2006

    merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 139
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  g.nom
        ,   c.date
        ,   SUM(c.nbhab)
    FROM    groupe  AS g
      INNER JOIN  groupe_commune  AS gc
        ON  g.id_groupe = gc.id_commune
      INNER JOIN  communes AS c
        ON  gc.id_commune = c.id_commune
    WHERE   g.id_groupe = 1
      AND   c.date BETWEEN  CAST('01/02/2006' AS DATE)  AND CAST('20/11/2006' AS DATE)
    GROUP BY  g.nom, c.date
    ORDER BY  g.nom, c.date
    ;
    Attention toutefois que date est un mot réservé de SQL et ne devrait pas être utilisé comme nom de colonne...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Est-ce que le résultat attendu est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    du 2006-02-20 au 2006-05-15 --> 100 000
    du 2006-05-15 au 2006-09-20 --> 115 000
    du 2006-09-20 au 2006-10-20 --> 125 000
    à partir du 2006-10-20      --> 275 000

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Par défaut
    la reponse attendue est bien celle-ci

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Alors c'est un peu plus compliqué, je n'ai pas pris en compte les groupes, cette partie étant facile à ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select Debut, Fin , sum(nbhab)
    from (select a.ladate as Debut, min(b.ladate) as Fin
          from laTable a left join laTable b
                              on a.ladate < b.ladate
          group by a.ladate) c left join laTable d
                                      on d.ladate < coalesce(Fin, to_date('01/01/2999', 'DD/MM/YYYY'))
    where not exists (select null
                      from laTable e
                      where d.id_commune = e.id_commune
                        and d.ladate < e.ladate
                        and e.ladate < coalesce(Fin, to_date('01/01/2999', 'DD/MM/YYYY')))
    group by Debut, Fin ;
    J'ai testé, cela donne bien le bon résultat avec ce jeu d'essai.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Par défaut
    j'ai oublié de préciser, j'utilise Mysql
    la fonction coalesce fonctionne t elle ?

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

Discussions similaires

  1. tracer des courbes d'evolution dans une application web
    Par riadhhwajdii dans le forum JSF
    Réponses: 1
    Dernier message: 09/07/2009, 11h45
  2. tracer des courbes d'evolution dans une application web
    Par riadhhwajdii dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 07/07/2009, 16h34
  3. [.NET C# VS05] Evolution d'une progress bar
    Par NeraOne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/06/2007, 18h23
  4. [Outils Tests] Créer une population Test
    Par Titouf dans le forum Oracle
    Réponses: 1
    Dernier message: 01/02/2007, 23h01
  5. [Oracle 8i] Créer une population test
    Par Titouf dans le forum Oracle
    Réponses: 3
    Dernier message: 14/12/2006, 23h37

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