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 :

Deux requêtes presque semblables donnent deux résultats


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut Deux requêtes presque semblables donnent deux résultats
    Bonjour, j'ai deux requettes presque - simultide-- mais malhereusement j'aurai deux résultats distincts, si vous avez trouvé le moyen pour qu'on aie le même résultat soyez le bienvenue.
    1. Prémier code:

    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
     
    SQL> SELECT   DECODE (COUNT (regimerefinancement),
      2                   NULL, 0,
      3                   COUNT (regimerefinancement)
      4                  ) nbregime,
      5           regimerefinancement
      6      FROM (SELECT   cotation.identifiant_cot AS identifiant_cot,
      7                     cotation.numero_cot AS numero_cot,
      8                     cotation.regimerefinancement AS regimerefinancement,
      9                    cotation.date_validite AS date_validite,
     10                     cotation.visee AS visee, COUNT (*) AS comptage
     11                FROM cotation
     12               WHERE date_validite >= to_date(sysdate,'DD/MM/YYYY')
     13                 AND numero_cot IN (SELECT   MAX (numero_cot) numero
     14                                        FROM cotation
     15                                       WHERE visee = 1
     16                                    GROUP BY identifiant_cot)
     17            GROUP BY identifiant_cot,
     18                     numero_cot,
     19                     date_validite,
     20                     visee,
     21                     regimerefinancement
     22            ORDER BY comptage ASC)
     23  GROUP BY regimerefinancement
     24  ORDER BY regimerefinancement;
     
      NBREGIME RE                                                                   
    ---------- --                                                                   
           157 G                                                                    
           618 H                                                                    
          7164 N                                                                    
           726 P                                                                    
          1128 R                                                                    
           415 T                                                                    
     
    6 ligne(s) sélectionnée(s).
    1. Deuxième code

    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
     
    SQL> SELECT   DECODE (COUNT (regimerefinancement),
      2                   NULL, 0,
      3                   COUNT (regimerefinancement)
      4                  ) nbregime,
      5           regimerefinancement
      6      FROM (SELECT   cotation.identifiant_cot AS identifiant_cot,
      7                     cotation.numero_cot AS numero_cot,
      8                     cotation.regimerefinancement AS regimerefinancement,
      9                    cotation.date_validite AS date_validite,
     10                     cotation.visee AS visee, COUNT (*) AS comptage
     11                FROM cotation
     12               WHERE date_validite >= to_date('28/02/2008','DD/MM/YYYY')
     13                 AND numero_cot IN (SELECT   MAX (numero_cot) numero
     14                                        FROM cotation
     15                                       WHERE visee = 1
     16                                    GROUP BY identifiant_cot)
     17            GROUP BY identifiant_cot,
     18                     numero_cot,
     19                     date_validite,
     20                     visee,
     21                     regimerefinancement
     22            ORDER BY comptage ASC)
     23  GROUP BY regimerefinancement
     24  ORDER BY regimerefinancement;
     
      NBREGIME RE                                                                   
    ---------- --                                                                   
            53 G                                                                    
           122 H                                                                    
          2637 N                                                                    
           211 P                                                                    
           290 R                                                                    
           102 T                                                                    
     
    6 ligne(s) sélectionnée(s).

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est sympa de nous filer du code.
    C'est le jeu des 7 erreurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date(sysdate,'DD/MM/YYYY')
    Pas bon. Sysdate est une date.

  3. #3
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    et en les lancant les 2 à la même date ???
    parce que bon moi à part le sysdate (date du jour) qui devient "28/02/2008" dans la 2ieme requete je vois pas trop la différence ...

    Si c'est ça, on ne pourra rien faire tu sais ... une base de données ca bouge , si tu changes les dates de référence ... c'est normal que tu n'ais pas le même résultat .....

  4. #4
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    Si j'ai bien vu la seule différence est au niveau du "sysdate" qui devient "'28/02/2008'". Pour moi c'est normal car sysdate c'est maintenant à 28/04/2008 à 14h53 alors que ton '28/04/2008' c'est le 28/04/2008 à 00h00.

    Pour moi la différence vient des enregistrements situés entre ce matin 00h00 et maintenant...

    PS : C'est 28/02/2008 comme dans le code ou 28/04/2008 comme je le pense ?

  5. #5
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par philcero Voir le message
    Si j'ai bien vu la seule différence est au niveau du "sysdate" qui devient "'28/02/2008'". Pour moi c'est normal car sysdate c'est maintenant à 28/04/2008 à 14h53 alors que ton '28/04/2008' c'est le 28/04/2008 à 00h00.

    Pour moi la différence vient des enregistrements situés entre ce matin 00h00 et maintenant...
    c'est pas "28/04/2008" mais "28/02/2008" ca change beaucoup plus les données

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    En fait y'a qu'à faire un
    Edit : Si c'est bien 28/04/2008

  7. #7
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par McM Voir le message
    En fait y'a qu'à faire un
    Edit : Si c'est bien 28/04/2008
    Oui bien c'est bien 28/04/2008 mais non 28/02/2008 mais les résultats sont toujours diffèrents

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sysdate from dual
    ?

  9. #9
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    C'est peut-être tout con, as-tu fait un SELECT SYSDATE FROM DUAL pour vérifier que ton serveur n'est pas au 3 mai 1976 ?

    Je sais c'est idiot, mais bon...

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Mais non c'est pas idiot. La preuve on y a pensé en même temps.

    Sinon, Sabact, c'est toi qui a les données sous la main. A toi de faire le comparatif des sous requetes sur la table cotation (1 fois avec le paramètre en dur, l'autre avec sysdate)

    Fais juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from cotation where ... and date_validite >= trunc(sysdate)
    minus
    select * from cotation where ... and date_validite >= to_date('28.04.2008', 'DD.MM.YYYY')
    et l'inverse aussi au cas où la 2nde ramène plus de lignes que la première.

  11. #11
    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 McM Voir le message
    C'est sympa de nous filer du code.
    C'est le jeu des 7 erreurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date(sysdate,'DD/MM/YYYY')
    Pas bon. Sysdate est une date.

    Pas bon? tu veux dire absoluement dégueu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> alter session set nls_date_format='DD/D/DDD';
     
    Session altered.
     
    SQL> select to_char(to_date(sysdate,'DD/MM/YYYY'),'DL') from dual;
    TO_CHAR(TO_DATE(SYSDATE,'DD/M
    -----------------------------
    Monday, February 28, 0119
    pas vraiment la date du jour...

  12. #12
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par philcero Voir le message
    C'est peut-être tout con, as-tu fait un SELECT SYSDATE FROM DUAL pour vérifier que ton serveur n'est pas au 3 mai 1976 ?

    Je sais c'est idiot, mais bon...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select sysdate from dual;
     
    SYSDATE                                                                         
    --------                                                                        
    28/04/08

  13. #13
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    On en revient à mon idée première :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select sysdate from dual;
     
    SYSDATE
    ---------
    28-APR-08
     
    SQL> select 'coucou' from dual where to_date(sysdate,'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
     
    no rows selected
    to_date(sysdate,'DD/MM/YYYY') garde l'horaire en elle même si cela ne se voie pas. Pour avoir uniquement la date à 00h00 :

    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
    SQL> select 'coucou' from dual where to_date(sysdate,'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
     
    no rows selected
     
    SQL> select to_date(sysdate,'DD/MM/YYYY') from dual;
     
    TO_DATE(S
    ---------
    28-APR-08
     
    SQL> select to_date('28/04/2008','DD/MM/YYYY') from dual;
     
    TO_DATE('
    ---------
    28-APR-08
     
    SQL> select 'coucou' from dual where to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
     
    'COUCO
    ------
    coucou

  14. #14
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Déjà donné le code du trunc.
    Citation Envoyé par Sabact Voir le message
    Citation Envoyé par McM Voir le message
    En fait y'a qu'à faire un
    Edit : Si c'est bien 28/04/2008
    Oui bien c'est bien 28/04/2008 mais non 28/02/2008 mais les résultats sont toujours diffèrents

  15. #15
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par McM Voir le message
    Déjà donné le code du trunc.
    En se lancant dans le TOAD j'ai eu 28/04/2008 et dans sqlplus 28/04/08,
    en vérifiant dans le regedit on a trouvé le format de la date dd/m/rr
    C'est résolu merci.

  16. #16
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Pour être bien claire, je voudrai demande une plus d'information sur le format de la date, d'après vous à quoi diffère le format 'dd/mm/rrrr' et 'dd/mm/yyyy'.
    Merci

  17. #17
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Sabact Voir le message
    En se lancant dans le TOAD j'ai eu 28/04/2008 et dans sqlplus 28/04/08,
    en vérifiant dans le regedit on a trouvé le format de la date dd/m/rr
    C'est résolu merci.

    Les classiques différences de valeurs des variables NLS dans les clients graphiques ...

  18. #18
    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 philcero Voir le message
    to_date(sysdate,'DD/MM/YYYY')
    garde l'horaire en elle même si cela ne se voie pas
    non, c'est pas vrai ça.

    Par contre to_date(sysdate,'DD/MM/YYYY') avec un format NLS de DD-MON-RR retourne une date au 1er siècle après JC

  19. #19
    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
    to_date(sysdate, 'DD/MM/YYYY')
    ==>
    to_date(to_char(sysdate),'DD/MM/YYYY')
    ==>
    to_char('28-APR-08','DD/MM/YYYY')
    ==>
    28 avril 0008


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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/08/2013, 19h41
  2. [QR3 D7] Imprimer le résultat de deux requêtes
    Par Moine dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/05/2008, 16h26
  3. Enigme sur deux requêtes apparemment semblables
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/02/2008, 14h10
  4. Importer le résultat de deux requête dans un Excel
    Par alexandrebergercyr dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/05/2007, 18h21
  5. Afficher le ratio du résultat de deux requêtes
    Par decour dans le forum Access
    Réponses: 25
    Dernier message: 07/11/2005, 19h54

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