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 :

Requête SQL qui me bloque


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Requête SQL qui me bloque
    Bonjour,

    J'arrive pas à trouver une requête qui ne doit pas être trop dure pour un pro du SQL.

    Voila j'ai 4 tables :
    - DEMCONTRAT (Contrats)
    - DEMCONTYP (types de contrat)
    - DEMCON (Correspondance contrat / réservation)
    - DOMDEM (réservation de places)

    DEMCONTRAT a une clé étrangère sur DEMCONTYP
    DECON a pour clé primaire la clé primaire de DEMCONTRAT et celle de DOMDEM
    DOMDEM a un attribut date de dernière réservation.

    J'ai une fonction métier qui doit me retourner une liste de contrats filtrés suivant leur type de contrat et sur la date de fin de la dernière réservation. Je voudrais par obligation de performance faire une seule requête pour cette fonction.
    Le problème c'est que ma requête doit trouver 'toute seule' la réservation la plus récente pour chaque contrat et là je coince...

    Voilà j'espère que c'est clair. Merci d'avance

  2. #2
    Membre habitué Avatar de Kimael
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 159
    Points
    159
    Par défaut
    Tu as essayé quoi pour l'instant ?

    [Edité par Kimael][/Edité]
    Membre du comité "Mort aux cons ! ARG..."
    Plus on essaye, et plus on a de chances de réussir... proverbe Shadok.
    Pensez au tag [Résolu], merci.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Pour le moment j'essaie de faire une requete qui donne les pour chaque code de contrat, le code de la demande la plus récente. J'ai essayé ça comme requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     DEMCONTRAT.idcontrat, DOMDEM.dtfin, DEMCON.iddemande
    FROM         DEMCON INNER JOIN
                          DEMCONTRAT ON DEMCON.idcontrat = DEMCONTRAT.idcontrat INNER JOIN
                          DOMDEM ON DEMCON.idport = DOMDEM.idport
    GROUP BY DEMCONTRAT.idcontrat, DOMDEM.dtfin, DEMCON.iddemande
    ORDER BY DOMDEM.dtfin DESC
    Mais il faudrait qu'il ne garde que la demande ayant la date de fin la plus grande pour chaque contrat

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Est-ce que cela te convient ?

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    drop table demcontrat cascade constraints ;
    drop table demcontyp cascade constraints ;
    drop table domdem cascade constraints ;
    drop table demcon cascade constraints ;
    -- Contrats
    create table demcontrat (
      cont_id int primary key,
      cont_libelle varchar(20),
      cont_type int
    ) ;
     
    -- Types de Contrats
    /*
    create table demcontyp (
      type_id int primary key,
      type_libelle varchar(30)
    ) ;
    */
    -- Réservation
    create table domdem (
      resa_id int primary key,
      resa_date date
    ) ;
     
    -- Correspondance contrat / réservation
    create table demcon (
      cont_id int,
      resa_id int,
      constraint demcon_pk primary key ( cont_id,resa_id),
      constraint demcon_cont_id_fk foreign key (cont_id) references demcontrat (cont_id),
      constraint demcon_resa_id_fk foreign key (resa_id) references domdem (resa_id)
    ) ;
     
     
    insert into demcontrat values (1,'Contrat 1',1) ;
    insert into demcontrat values (2,'Contrat 2',2) ;
    insert into demcontrat values (3,'Contrat 3',1) ;
     
    insert into domdem values (4,to_date('30/01/2003','dd/mm/yyyy')) ;
    insert into domdem values (3,to_date('15/01/2004','dd/mm/yyyy')) ;
    insert into domdem values (5,to_date('15/01/2004','dd/mm/yyyy')) ;
    insert into domdem values (1,to_date('01/01/2003','dd/mm/yyyy')) ;
    insert into domdem values (2,to_date('10/01/2003','dd/mm/yyyy')) ;
     
    insert into demcon values (1,1) ;
    insert into demcon values (1,2) ;
    insert into demcon values (2,3) ;
    insert into demcon values (2,4) ;
    insert into demcon values (3,5) ;
     
    select cont_id , cont_type, max(resa_date) as date_fin from demcontrat natural join demcon natural join domdem
    group by cont_id, cont_type
    order by cont_type, date_fin;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci pour ton aide christie, mais un collègue m'a débloqué. Il fallait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT maxdem.idcontrat, maxdem.dtfinmax
    FROM         DEMCON INNER JOIN
                          DEMCONTRAT ON DEMCON.idcontrat = DEMCONTRAT.idcontrat INNER JOIN
                          DOMDEM ON DEMCON.iddemande = DOMDEM.iddoss INNER JOIN
                              (SELECT     DEMCONTRAT.idcontrat, MAX(DOMDEM.dtfin) dtfinmax
                                FROM          DEMCON INNER JOIN
                                                       DEMCONTRAT ON DEMCON.idcontrat = DEMCONTRAT.idcontrat INNER JOIN
                                                        DOMDEM ON DEMCON.iddemande = DOMDEM.iddoss
                                GROUP BY DEMCONTRAT.idcontrat) maxdem ON DOMDEM.dtfin = maxdem.dtfinmax AND 
                          DEMCONTRAT.idcontrat = maxdem.idcontrat

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Si tu as le temps pourrais tu tester ma requète que j'ai réadapté en fonction de tes noms de colonnes et me dire si elle fonctionne (par pure curiosité) et si elle correspond bien au problème soumis.
    (Par contre, j'ai fait un tri par type de contrat.)

    select demcontrat.idcontrat , cont_type, max(dtfin) as date_fin
    from demcontrat inner join demcon on demcontrat.idcontrat = demcon.idcontrat
    inner join domdem on demcon.iddemande = domdem.iddoss
    group by demcontrat.idcontrat, demcontrat.cont_type
    order by demcontrat.cont_type, date_fin ;

    Merci
    Christie

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

Discussions similaires

  1. [SQL] Requête sql qui plante sous firefox et marche sous IE
    Par PlayKat dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/10/2007, 16h17
  2. Requête SQL qui me pose problème
    Par CB56 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h07
  3. Exécution d'une requête SQL qui affiche un message
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/11/2006, 16h15
  4. [MySQL] Requête SQL qui zappe la premiere ligne
    Par mulbek dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/01/2006, 16h24
  5. Réponses: 2
    Dernier message: 06/06/2005, 15h13

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