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 confirmé Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    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 confirmé

    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
    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 chevronné 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
    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 émérite 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 : 54
    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
    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 chevronné 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
    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 confirmé

    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
    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 confirmé Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    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 confirmé

    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
    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 émérite 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 : 54
    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
    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 confirmé

    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
    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
    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 confirmé Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    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 émérite 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 : 54
    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
    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 confirmé

    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
    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 confirmé Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    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 confirmé Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    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 Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    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 ...
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  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
    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
    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