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 :

Requete SQL d'agrégation


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut Requete SQL d'agrégation
    Bonjour,
    Cela fait un petit moment que je n'ai plus fait de requête sql et j'aurai besoin d'un petit coup de main pour m'y remettre.
    Le besoin est le suivant :
    Une table regroupant un ensemble de tuples (col1, col2, col3)
    - Dans col1 j'ai la possibilité de retrouver à plusieurs reprises la même valeur
    - Dans col2 j'ai une date de création au format (xx.xx.xxxx)
    J'ai besoin de compter le nombre d'occurence de col1 se trouvant entre deux bornes.
    1ère borne : Date de début se trouvant être la date de la première occurence trouvée
    2ème borne : Date de fin se trouvant être la date de la première occurence trouvée plus 12 mois.
    Cette requête permet de mesurer le nombre de retour en l'espace de 12 mois d'un article par son no de série (col1).
    Pouvez-vous m'aiguiller sur la manière de procéder ?
    Un grand merci
    Jask

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Premiere occurrence de col2

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t.col1
         , count(*)
    from table t, (select col2 from table where col2 is not null and rownum=1) u
    where t.col2 between u.col2 and add_monthS(u.col2,1);

    Valeur minimale de col2

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t.col1
         , count(*)
    from table t, (select min(col2) c2 from table) u
    where t.col2 between u.c2 and add_monthS(u.c2,1);

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Quelqu'un aurait il une esquisse de solution ?
    afin que je puisse partir sur une piste tangible ?
    A+
    Jask

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Relisez votre discussion.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Désolé mon browser n'a pas réactualisé le fil.
    Je regarde cela.
    Jask

  6. #6
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Merci beaucoup ojo77,

    J'ai modifié la requête de manière à répondre au besoin suivant.
    En 2008 (année de référence) nous avons eu un retour d'un article.
    Il nous faut pouvoir savoir si cet article est revenu une seconde fois (ou plus) en l'espace de 12 mois depuis la première réparation.

    La requête a été modifiée en ce sens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT count(*) NbreSerie,col1
    FROM table, (SELECT col2 FROM table WHERE col2 IS NOT NULL 
    AND to_char(col2,'yyyy')='2008' AND rownum=1) u
    WHERE col2 BETWEEN u.col2 AND add_months(u.col2,12)
    GROUP BY col1
    ORDER BY NbreSerie desc;
    Cependant, en testant cette requête les enregistrements portent sur une année +1 sans englober l'année 2008
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    3|001-AA
    3|002-BB
    3|003-CC
    2|004-DD
    Si je vais vérifier 001-AA, je tombe sur les dates suivantes :
    12.02.2009
    17.03.2009
    01.07.2009
    Et aucune pour 2008 (il n'en existe pas pour la valeur 001-AA).
    Comment puis-je modifier la requête afin qu'elle puisse répondre à mon besoin ?

    Merci encore,

    Jask

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    Voila un script qui fait je crois exactement ce aue tu recherches :

    Code sql : 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
    WITH t1 AS 
    (
    SELECT '101' AS my_id, SYSDATE-254 AS my_date FROM dual UNION ALL
    SELECT '101' AS my_id, SYSDATE-25 AS my_date FROM dual UNION ALL
    SELECT '101' AS my_id, SYSDATE+453 AS my_date FROM dual UNION ALL
    SELECT '102' AS my_id, SYSDATE AS my_date FROM dual UNION ALL
    SELECT '101' AS my_id, SYSDATE+150 AS my_date FROM dual
    )
    SELECT t1.my_id, 
           COUNT(*) 
    FROM t1 ,
         (SELECT my_id, 
    		         MIN(my_date) min_date
    		  FROM t1 t2 
    			GROUP BY my_id) tmp_min_date
    WHERE t1.my_id = tmp_min_date.my_id 
    AND   t1.my_date < add_months(tmp_min_date.min_date, 12)
    GROUP BY t1.my_id

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 16h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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