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

DB2 Discussion :

Problème pour créer une requete SQL pour DB2


Sujet :

DB2

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Problème pour créer une requete SQL pour DB2
    Bonjour à tous
    Je viens vers vous en désespoir de cause.
    Je dispose d'une table avec des historiques qui ressence des notes d'entreprise données par des agences de notations (et oui je travaille dans la finance )
    Exemple
    Entreprise!Agence!terme!note!Date
    A!M!1!A!2013-06-01
    A!M!1!B!2013-05-01
    A!M!1!B+!2013-04-23
    A!M!2!A!2013-06-05
    A!M!2!B+!2012-12-31
    A!SP!1!A!2013-06-01
    A!SP!1!B+!2013-04-22
    A!SP!2!A!2013-06-05
    A!SP!2!C!2013-01-01
    (désolée je n'ai pas réussi à insérer mon tableau)
    Ce que je veux faire c'est rendre la dernière note de chaque catégorie en une seule requête(les lignes soulignées).
    Aujourd'hui on a codé dans un premier temps un group BY :
    SELECT Entreprise,Agence,terme,Max(date)
    frome table
    group by entreprise,agence,terme

    Puis une deuxième appel pour chaque ligne rendue pour avoir la note de la ligne. mais je suis sûre qu'on peut faire ça en une fois.
    Merci d'avance de votre aide

    PS on a une version de DB2 assez puissante

  2. #2
    Membre à l'essai
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Pour info j'ai réussi à faire ce que je voulais avec une clause WITH pour faire une vue temporaire (baptisée note) mais je me demande s'il n'y a pas plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH NOTE AS (                                                     
      SELECT CODAGC AS Agence,                                   
             CODTYPTRM AS terme,                             
             MAX(DATDEBVLD) AS Date                         
      FROM TSGCNTE                                               
       WHERE CODENT = '00155'                                                
         GROUP BY CODAGC,CODTYPTRM
         )                                                                
      SELECT T.CODENT,T.CODAGC,T.CODTYPTRM,T.DATDEBVLD,T.CODNTA
    FROM TSGCNTE T,NOTE                
         WHERE  Date = T.DATDEBVLD     
            AND CODENT = '00155'
            AND Agence    = T.CODAGC          
            AND terme = T.SGCNTE_CODTYPTRM
    Merci d'avance

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    avec une fonction de fenetrage on peut faire ceci avec un seul scannage de table / index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with tmp as (
    SELECT CODAGC AS Agence, CODTYPTRM AS terme, DATDEBVLD AS Date, row_number() over(partition by CODAGC, CODTYPTRM order by DATDEBVLD desc) as rnk
    FROM TSGCNTE
    WHERE CODENT = '00155')
     
    select *
    from tmp
    where rnk = 1

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 089
    Points : 31 345
    Points
    31 345
    Billets dans le blog
    16
    Par défaut
    Variante dans l'esprit du modèle relationnel de données :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.CODENT,T.CODAGC,T.CODTYPTRM,T.DATDEBVLD,T.CODNTA
    FROM   TSGCNTE AS T INNER JOIN 
           (
            SELECT CODAGC, CODTYPTRM, MAX(DATDEBVLD) AS DATDEBVLD 
            FROM TSGCNTE 
            WHERE CODENT = '00155' 
            GROUP BY CODAGC, CODTYPTRM
           ) AS U
            ON T.CODAGC = U.CODAGC AND T.CODTYPTRM = U.CODTYPTRM AND T.DATDEBVLD = U.DATDEBVLD
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2010, 10h19
  2. aide pour formuler une requete sql
    Par viny dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 01/03/2008, 12h20
  3. aide pour créer une requete sql
    Par DonKnacki dans le forum Langage SQL
    Réponses: 11
    Dernier message: 07/02/2008, 18h17
  4. Combinaison de liste déroulante pour créer une requete
    Par jeje22 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/09/2006, 16h23

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