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

Oracle Discussion :

[ORACLE 8.1.7] - Requete trivial


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut [ORACLE 8.1.7] - Requete trivial
    Bonjour,

    J'effectuer la migration d'une tres vielle appli avec une base tres
    mal pensé... après de longue heures perdu je tente ma chance ici...

    voila ce que j'ai
    --

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ROWNUM NODA       DD
    ---------- ---------- ---------
             1 879300114  20-JUN-93
             2 879300114  22-JUN-93
             3 879300114  23-JUN-93
    voila ce qu'il me faut
    --
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ROWNUM NODA       DD        DF
    ---------- ---------- --------- ---------
             1 879300114  20-JUN-93 22-JUN-93
             2 879300114  23-JUN-93
    --
    c'est une table plusieurs de dizaines de millier de ligne ... alors s'il existe
    une methode pas trop gourmande pour realisé une opération de ce genre je suis
    preneur. L'operation doit ce faire si possible que en SQL et la version d'oracle
    est une 8.1.7.4

    une idée réalisable... oui / non ??

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Techniquement c'est réalisable avec 1 auto-jointure, mais qu'elle est la régle qui décide que la date est DD ou DF ?

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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
    SQL> create table t(noda number,dd date);
     
    Table created.
     
    SQL> insert into t values (879300114,to_date('20-JUN-93','DD-MON-RR'));
     
    1 row created.
     
    SQL> insert into t values (879300114,to_date('22-JUN-93','DD-MON-RR'));
     
    1 row created.
     
    SQL> insert into t values (879300114,to_date('23-JUN-93','DD-MON-RR'));
     
    1 row created.
     
    SQL> 
    SQL> select noda,max(decode(mod(r,2),1,dd)) dd, max(decode(mod(r,2),0,dd)) df from
      2      (select noda,dd,row_number() over (partition by noda order by dd) r from t)
      3  group by noda,trunc((r+1)/2);
          NODA DD                  DF
    ---------- ------------------- -------------------
     879300114 20.06.1993 00:00:00 22.06.1993 00:00:00
     879300114 23.06.1993 00:00:00

  4. #4
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut
    La regle est simple la colonne DF de la ligne 1 corresponse au DD de la ligne 2 et ...

    la solution de laurentschneider me parrait très bien (je suis en train de la tester) mais elle contient une notion que je n'ai pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...over (partition by...
    c quoi exatement...

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    ROW_NUMBER() est une fonction analytique, qui nécessite une clause OVER ().

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Fonction analytique : Cela n'existe pas en 8.1.7
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Médiat
    Fonction analytique : Cela n'existe pas en 8.1.7
    si ça existe !

    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
     
    SQL> select * from v$version;
    BANNER
    ----------------------------------------------------------------
    Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    PL/SQL Release 8.1.7.4.0 - Production
    CORE    8.1.7.0.0       Production
    TNS for IBM/AIX RISC System/6000: Version 8.1.7.4.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production
     
    SQL> select noda,max(decode(mod(r,2),1,dd)) dd, max(decode(mod(r,2),0,dd)) df from
      2      (select noda,dd,row_number() over (partition by noda order by dd) r from t)
      3  group by noda,trunc((r+1)/2);
          NODA DD                  DF
    ---------- ------------------- -------------------
     879300114 20.06.1993 00:00:00 22.06.1993 00:00:00
     879300114 23.06.1993 00:00:00
    mais sans doute pas dans ta version 8i standard

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par laurentschneider
    si ça existe !
    mais sans doute pas dans ta version 8i standard
    D'autant plus que c'était une 8 (sans le i) donc en fait une 8.1.6 (c'était il y a longtemps...)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut
    j'ai récupéré la doc concernant ces fonctions... très interessant ; j'en ignorai l'existance...
    http://lalystar.developpez.com/fonctionsAnalytiques/


    si je reviens a mon problème en fait j'ai pas tout dis...

    la requete donné plus haut fonctionne mais pas exactement comme je le souhaire... par ex.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NODA       NOU TY DD       DF
    ---------- --- -- -------- --------
    870519882  271 EN 01/07/05
    870519882  271 PI          03/07/05
    870519882  284 PI 03/07/05
    870519882  453 PI          01/07/05
    870519882  481 PI 18/07/05
    870519882  481 SH          16/08/05
    je dois arriver a obtenir...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NODA       NOU TY DD       DF
    ---------- --- -- -------- --------
    870519882  271 EN 01/07/05 01/07/05
    870519882  453 PI 01/07/05 03/07/05
    870519882  271 PI 03/07/05 03/07/05
    870519882  284 PI 03/07/05 18/07/05
    870519882  481 PI 18/07/05 16/08/05
    870519882  481 SH 16/08/05
    Merci pour votre aide...

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    nouvel essai

    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
     
    SQL> create table t(noda number,nou number,ty varchar2(2), dd date);
     
    Table created.
     
    SQL> insert into t values (870519882,271,'EN',to_date('01/07/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> insert into t values (870519882,271,'PI',to_date('03/07/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> insert into t values (870519882,284,'PI',to_date('03/07/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> insert into t values (870519882,453,'PI',to_date('01/07/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> insert into t values (870519882,481,'PI',to_date('18/07/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> insert into t values (870519882,481,'SH',to_date('16/08/05','DD.MM.RR'));
     
    1 row created.
     
    SQL> 
    SQL> select noda,nou,ty,dd,lead(dd) over (partition by noda order by dd,nou) df from t;
          NODA        NOU TY DD         DF
    ---------- ---------- -- ---------- ----------
     870519882        271 EN 01.07.2005 01.07.2005
     870519882        453 PI 01.07.2005 03.07.2005
     870519882        271 PI 03.07.2005 03.07.2005
     870519882        284 PI 03.07.2005 18.07.2005
     870519882        481 PI 18.07.2005 16.08.2005
     870519882        481 SH 16.08.2005
     
    6 rows selected.

  11. #11
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut
    J'ai pas tout compris .. mais ca fonctionne

    BRAVO !! BRAVO !! et merci...

    si t'a une docs plus complete que celle que j'ai pour expliquer comment fonctionne ces fonctions je crois que je vais optimisé un tas d'appli avec ca


    encore merci !!

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    rien de mieux que la doc de Lalystar... voir Oracle : http://download-west.oracle.com/docs...s60a.htm#83849

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

Discussions similaires

  1. [Oracle 9.2.] Problème requete "update"
    Par Isa31 dans le forum Oracle
    Réponses: 49
    Dernier message: 01/08/2006, 14h38
  2. [Oracle 9] concat et requêtes SQL
    Par marti dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/06/2006, 20h38
  3. [Oracle] jointure et sous requete
    Par K_!!! dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/06/2006, 09h24
  4. Réponses: 8
    Dernier message: 17/05/2006, 14h32
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

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