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 :

Requête de sélection : casse tête 2


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut Requête de sélection : casse tête 2
    Bonjour,

    voilà j'ai deux tables avec comme exemple de données

    T1 :
    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
     
            REF ENTREE              SORTIE                       A          B
    ---------- ------------------- ------------------- ---------- ----------
         50180 01/02/2010 13:07:30 01/02/2010 13:07:46          1          2
         50180 01/02/2010 13:07:46 01/02/2010 13:45:45          2          5
         50180 01/02/2010 13:45:45 01/02/2010 15:50:01          5          6
         50180 01/02/2010 15:50:01 01/02/2010 15:50:20          6         23
         50180 01/02/2010 15:50:20 01/02/2010 15:50:23         23          2
         50180 01/02/2010 15:50:23 02/02/2010 14:53:13          2          5
         50180 02/02/2010 14:53:13 02/02/2010 15:05:41          5          6
         50180 02/02/2010 15:05:41 02/02/2010 15:06:37          6         23
         50180 02/02/2010 15:06:37 02/02/2010 15:07:12         23          2
         50180 02/02/2010 15:07:12 02/02/2010 15:10:10          2          1
         50180 02/02/2010 15:10:10 02/02/2010 15:18:31          1          2
         50180 02/02/2010 15:18:31 02/02/2010 15:18:35          2          5
         50180 02/02/2010 15:18:35 02/02/2010 15:18:37          5          6
         50180 02/02/2010 15:18:37 02/02/2010 15:18:50          6         23
         50180 02/02/2010 15:18:50 02/02/2010 15:18:53         23          2
         50180 02/02/2010 15:18:53 02/02/2010 15:51:01          2          5
         50180 02/02/2010 15:51:01 02/02/2010 15:51:07          5          6
         50180 02/02/2010 15:51:07 02/02/2010 15:51:17          6         23
         50180 02/02/2010 15:51:17                             23

    et T2 avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           REF CHANGE                   CLASS     SCLASS
    ---------- ------------------- ---------- ----------
         50180 01/02/2010 13:10:57        164         21
         50180 01/02/2010 15:50:20        165         62
         50180 02/02/2010 15:06:37        165         62
         50180 02/02/2010 15:10:12        203         62
         50180 02/02/2010 15:18:50        203         62
         50180 02/02/2010 15:51:17        165         62

    le but étant d'obtenir ce qui suit :

    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
     
           REF ENTREE              SORTIE                       A          B CHANGE                   CLASS     SCLASS
    ---------- ------------------- ------------------- ---------- ---------- ------------------- ---------- ----------
         50180 01/02/2010 13:07:30 01/02/2010 13:07:46          1          2
         50180 01/02/2010 13:07:46 01/02/2010 13:45:45          2          5 01/02/2010 13:10:57        164         21
         50180 01/02/2010 13:45:45 01/02/2010 15:50:01          5          6 01/02/2010 13:10:57        164         21
         50180 01/02/2010 15:50:01 01/02/2010 15:50:20          6         23 01/02/2010 13:10:57        164         21
         50180 01/02/2010 15:50:20 01/02/2010 15:50:23         23          2 01/02/2010 15:50:20        165         62
         50180 01/02/2010 15:50:23 02/02/2010 14:53:13          2          5 01/02/2010 15:50:20        165         62
         50180 02/02/2010 14:53:13 02/02/2010 15:05:41          5          6 01/02/2010 15:50:20        165         62
         50180 02/02/2010 15:05:41 02/02/2010 15:06:37          6         23 01/02/2010 15:50:20        165         62
         50180 02/02/2010 15:06:37 02/02/2010 15:07:12         23          2 02/02/2010 15:06:37        165         62
         50180 02/02/2010 15:07:12 02/02/2010 15:10:10          2          1 02/02/2010 15:06:37        165         62
         50180 02/02/2010 15:10:10 02/02/2010 15:18:31          1          2 02/02/2010 15:06:37        165         62 (1)
         50180 02/02/2010 15:10:10 02/02/2010 15:18:31          1          2 02/02/2010 15:10:12        203         62 (2)
         50180 02/02/2010 15:18:31 02/02/2010 15:18:35          2          5 02/02/2010 15:10:12        203         62
         50180 02/02/2010 15:18:35 02/02/2010 15:18:37          5          6 02/02/2010 15:10:12        203         62
         50180 02/02/2010 15:18:37 02/02/2010 15:18:50          6         23 02/02/2010 15:10:12        203         62
         50180 02/02/2010 15:18:50 02/02/2010 15:18:53         23          2 02/02/2010 15:18:50        203         62
         50180 02/02/2010 15:18:53 02/02/2010 15:51:01          2          5 02/02/2010 15:18:50        203         62
         50180 02/02/2010 15:51:01 02/02/2010 15:51:07          5          6 02/02/2010 15:18:50        203         62
         50180 02/02/2010 15:51:07 02/02/2010 15:51:17          6         23 02/02/2010 15:18:50        203         62
         50180 02/02/2010 15:51:17                             23            02/02/2010 15:51:17        165         62
    En clair, pour chaque ligne de T1 je fais correspondre ou pas la ligne de T2 dont la valeur du champ CHANGE est la plus proche mais inférieure au champ sortie de la table T1 avec T1.REF = T2.REF

    (1) et (2) indique une ligne dupliquée de T1

    Merci.

  2. #2
    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
    Utilisez plutôt la balise code (#) que la balise quote pour mettre en forme des données, la première utilisant une police à largeur fixe et conservant les espaces.

    C'est excellent de fournir un ensemble de données (et c'est trop rare dès le premier post), par contre quand on arrive à un volume de données qui commence à déborder de la fenêtre c'est encore mieux de fournir les scripts de création de table et les inserts qui vont avec, afin que tout à chacun n'ait qu'un copier / coller à faire pour pouvoir se pencher sur votre problème (là il y a bien dix minutes de saisie pour vos données, c'est un peu décourageant).

    Par exemple pour votre deuxième table ça donnerait :
    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
    create table sfo_t2
    (
        change date,
        class  number(3),
        sclass number(2)
    );
     
    insert into sfo_t2 (change, class, sclass)
    select to_date('01/02/2010 13:10:57', 'dd/mm/yyyy hh24:mi:ss'), 164, 21 from dual union all
    select to_date('01/02/2010 15:50:20', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 from dual union all
    select to_date('02/02/2010 15:06:37', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 from dual union all
    select to_date('02/02/2010 15:10:12', 'dd/mm/yyyy hh24:mi:ss'), 203, 62 from dual union all
    select to_date('02/02/2010 15:18:50', 'dd/mm/yyyy hh24:mi:ss'), 203, 62 from dual union all
    select to_date('02/02/2010 15:51:17', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 from dual;
     
    commit;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    Voici les requêtes de création

    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
     
    CREATE TABLE sfo_t1
    (
        ref	   number(5),
        entree date,
        sortie date,
        in_state  number(2),
        to_state  number(2)
    );
     
    INSERT INTO sfo_t1 (ref, entree, sortie, in_state, to_state)
    SELECT 50180, TO_DATE('01/02/2010 13:07:30', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('01/02/2010 13:07:46', 'DD/MM/YYYY HH24:mi:ss'),1,2 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('01/02/2010 13:07:46', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('01/02/2010 13:45:45', 'DD/MM/YYYY HH24:mi:ss'),2,5 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('01/02/2010 13:45:45', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('01/02/2010 15:50:01', 'DD/MM/YYYY HH24:mi:ss'),5,6 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('01/02/2010 15:50:01', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('01/02/2010 15:50:20', 'DD/MM/YYYY HH24:mi:ss'),6,23 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('01/02/2010 15:50:20', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('01/02/2010 15:50:23', 'DD/MM/YYYY HH24:mi:ss'),23,2 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('01/02/2010 15:50:23', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 14:53:13', 'DD/MM/YYYY HH24:mi:ss'),2,5 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 14:53:13', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:05:41', 'DD/MM/YYYY HH24:mi:ss'),5,6 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:05:41', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:06:37', 'DD/MM/YYYY HH24:mi:ss'),6,23 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:06:37', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:07:12', 'DD/MM/YYYY HH24:mi:ss'),23,2 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:07:12', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:10:10', 'DD/MM/YYYY HH24:mi:ss'),2,1 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:10:10', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:18:31', 'DD/MM/YYYY HH24:mi:ss'),1,2 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:18:31', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:18:35', 'DD/MM/YYYY HH24:mi:ss'),2,5 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:18:35', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:18:37', 'DD/MM/YYYY HH24:mi:ss'),5,6 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:18:37', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:18:50', 'DD/MM/YYYY HH24:mi:ss'),6,23 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:18:50', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:18:53', 'DD/MM/YYYY HH24:mi:ss'),23,2 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:18:53', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:51:01', 'DD/MM/YYYY HH24:mi:ss'),2,5 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:51:01', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:51:07', 'DD/MM/YYYY HH24:mi:ss'),5,6 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:51:07', 'DD/MM/YYYY HH24:mi:ss'), TO_DATE('02/02/2010 15:51:17', 'DD/MM/YYYY HH24:mi:ss'),6,23 FROM DUAL UNION ALL
    SELECT 50180, TO_DATE('02/02/2010 15:51:17', 'DD/MM/YYYY HH24:mi:ss'), NULL,23,NULL FROM DUAL;
     
     
    CREATE TABLE sfo_t2
    (
        ref	   number(5),
        CHANGE date,
        class  number(3),
        sclass number(3)
    );
     
    INSERT INTO sfo_t2 (ref, CHANGE, class, sclass)
    SELECT 50180, to_date('01/02/2010 13:10:57', 'dd/mm/yyyy hh24:mi:ss'), 164, 21 FROM dual union ALL
    SELECT 50180, to_date('01/02/2010 15:50:20', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 FROM dual union ALL
    SELECT 50180, to_date('02/02/2010 15:06:37', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 FROM dual union ALL
    SELECT 50180, to_date('02/02/2010 15:10:12', 'dd/mm/yyyy hh24:mi:ss'), 203, 62 FROM dual union ALL
    SELECT 50180, to_date('02/02/2010 15:18:50', 'dd/mm/yyyy hh24:mi:ss'), 203, 62 FROM dual union ALL
    SELECT 50180, to_date('02/02/2010 15:51:17', 'dd/mm/yyyy hh24:mi:ss'), 165, 62 FROM DUAL;
     
    commit;

  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
    C'est l'icône juste à droite de celle qui permet de mettre la balise quote.
    Sinon vous pouvez l'écrire à la main CODE et /CODE entre crochets.

    Edit : apparement vous avez trouvé !
    Edit2 : il manque un dernier FROM DUAL sur le second insert.
    Edit3 : par contre j'ai supposé que le format de date était DD/MM/YYYY, mais ça signifierait que dans votre première table vous avez des entrées après des sorties ? Le format ne serait-il pas MM/DD/YYYY ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    Je remets les exemples avec dd/mm/yyyy hh24:mi:ss ainsi que la requête de création de celle-ci car les dates de T1 doivent se suivre

    on doit avoir :

    d1 d2
    d2 d3 et ....

    Merci.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    Les exemples ainsi que le code de création de T1 sont corrects maintenant.
    Merci pour vos remarques et votre attention.

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

Discussions similaires

  1. Requête de sélection : casse tête
    Par sfoggy dans le forum SQL
    Réponses: 5
    Dernier message: 01/02/2010, 15h56
  2. Requête SQL casse-tête
    Par MikeV dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/06/2007, 14h09
  3. Requête (casse tête)
    Par shadeoner dans le forum SQL
    Réponses: 13
    Dernier message: 12/06/2007, 17h13
  4. Requête casse tête!
    Par sonorc dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2007, 02h03
  5. requête SQL un peu casse tête
    Par hellbilly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2005, 10h03

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