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 :

Comparaison sur plusieurs années


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Points : 218
    Points
    218
    Par défaut Comparaison sur plusieurs années
    Bonjour,

    J'ai une table avec des données historisant au jour le jour des données météo. Je voudrais faire des comparaisons sur 4 ans.

    Par exemple pour faire simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Station		Dat		Temperature
    100		24/9/2009	10
    ...
    100		24/9/2008	15
    ...
    100		24/9/2007	22
    ...
    100		24/9/2006	12
    ...


    Pour le moment je fais cela comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select j.station, j.dat, un_an.temperature, deux_an.temperature, trois_an.temperature, quatre_an.temperature
    from donnees_j j, donnees_j un_an, donnees_j deux_an, donnees_j trois_an,donnees_j quatre_an
    where j.station = un_an.station and j.station = deux_an.station and j.station = trois_an.station and j.station = quatre_an.station
      and j.dat = add_months(un_an.dat,     -12)
      and j.dat = add_months(deux_an.dat,   -24)
      and j.dat = add_months(trois_an.dat,  -36)
      and j.dat = add_months(quatre_an.dat, -48)
    Je pense qu'il y a plus simple et il me semble que qu'il y a de nouvelle fonction dans Oracle 10g permettant de créer des cubes pour ce type d'analyse.

    Pouvez-vous m'aider ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 387
    Points
    18 387
    Par défaut
    Vous pouvez faire un pivot classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    With Stats AS
    (
    select 100 as station, to_date('24/09/2009', 'dd/mm/yyyy') as dt, 10 as temp from dual union all
    select 100           , to_date('24/09/2008', 'dd/mm/yyyy')      , 15         from dual union all
    select 100           , to_date('24/09/2007', 'dd/mm/yyyy')      , 22         from dual union all
    select 100           , to_date('24/09/2006', 'dd/mm/yyyy')      , 12         from dual union all
    select 102           , to_date('24/09/2007', 'dd/mm/yyyy')      , 11         from dual union all
    select 102           , to_date('24/09/2009', 'dd/mm/yyyy')      , 33         from dual 
    )
      select station,
             coalesce(max(case dt when trunc(sysdate)                  then temp end), 0) as an_m0,
             coalesce(max(case dt when trunc(add_months(sysdate, -12)) then temp end), 0) as an_m1,     
             coalesce(max(case dt when trunc(add_months(sysdate, -24)) then temp end), 0) as an_m2,
             coalesce(max(case dt when trunc(add_months(sysdate, -36)) then temp end), 0) as an_m3
        from Stats
       where dt >= trunc(add_months(sysdate, -36))
    group by station
    order by station asc;
     
    STATION	AN_M0	AN_M1	AN_M2	AN_M3
    100	10	15	22	12
    102	33	0	11	0

  3. #3
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    On peut récupérer les 5 enregistrements en une fois et n'afficher que la valeur de l'année souhaitée dans chaque colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    with donnees_j as (select 100 station, to_date('24/09/2009', 'DD/MM/YYYY') dat, 10 temperature from dual union all
                       select 100 station, to_date('24/09/2008', 'DD/MM/YYYY') dat, 15 temperature from dual union all
                       select 100 station, to_date('24/09/2007', 'DD/MM/YYYY') dat, 22 temperature from dual union all
                       select 100 station, to_date('24/09/2006', 'DD/MM/YYYY') dat, 12 temperature from dual union all
                       select 100 station, to_date('24/09/2005', 'DD/MM/YYYY') dat, 10 temperature from dual)
    select j.station,
           max(j.dat),
           max(decode(histo.an, 0, j.temperature)) temp_0,
           max(decode(histo.an, 1, j.temperature)) temp_1,
           max(decode(histo.an, 2, j.temperature)) temp_2,
           max(decode(histo.an, 3, j.temperature)) temp_3,
           max(decode(histo.an, 4, j.temperature)) temp_4
    from donnees_j j,
         (select level-1 an from dual connect by level <= 5) histo
    where j.dat = add_months(to_date('24/09/2009', 'DD/MM/YYYY'), -histo.an*12)
    group by j.station;

  4. #4
    Membre actif
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Points : 218
    Points
    218
    Par défaut
    Merci à tous. Je vais tester cela.

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

Discussions similaires

  1. Recherche par mois sur plusieurs années
    Par meteor26 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/02/2013, 20h55
  2. [Division relationnelle] Comparaison sur plusieurs tuples
    Par jowsuket dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2008, 15h49
  3. recuperer les n° de semaine sur plusieurs années
    Par meredith dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/11/2007, 09h40
  4. requête SQL: recuperation de données sur plusieurs années
    Par MisterGé dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/08/2007, 23h10
  5. Réponses: 4
    Dernier message: 25/11/2005, 18h15

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