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 :

[DATE] - not between problem


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut [DATE] - not between problem
    bonjour,

    j'ai un problème avec la création d'une requete :

    soit 2 tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Table A :
    NOIP       DAENTR   DASOR
    ---------- -------- --------
    1100030511 22/08/00 24/08/00
    1100030511 09/07/02 19/07/02
    1100030511 29/08/02 05/10/02
    1100030511 14/01/06 20/01/06
    1100030511 01/03/06 03/03/06
    1100030511 08/03/06 31/03/06
    1100030511 03/05/06 17/07/06
    1100030511 05/03/07 13/03/07
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Table B:
     
    NOIP       LABO_PARAM       VALEUR     UNITE    R DATER    DATET
    ---------- ---------------- ---------- -------- - -------- --------
    1100030511 BINA             141        mmol/l   R 06/03/07 06/03/07
    1100030511 BIK              xxx        mmol/l   R 06/03/07 06/03/07
    1100030511 BICL             101        mmol/l   R 06/03/07 06/03/07
    ...
    ==

    Ce que la requete doit exprimer.

    Recupérer tous les tubles de la table B où DATET n'est incluse dans aucune periode de la table A (de DAENTR à DASOR) pour un NOIP donné.

    Ma requete (qui est fausse) est la suivante!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from A,B where A.noip=B.noip and B.datet not between a.daentr and a.dasor.
    quelqu'un a t il une solution ??

    merci d'avance.

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Bonjour,

    Essaies ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
      FROM a, b
     WHERE a.noip = b.noip 
         AND (b.datet < a.daentr or  b.datet > a.dasor)

  3. #3
    Membre éclairé 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
    Par défaut
    déjà essayer.. meme resultat

    cette requete exprime le besoin suivant

    Recupérer tous les tubles de la table B où DATET n'est incluse dans le tuple où datet n'est pas dans la periode de la table A (de DAENTR à DASOR) pour un NOIP donné.

    par exemple :
    si on a dans la table a
    ligne1 - 01/01/05 01/03/05
    ligne2 - 05/03/05 01/05/05

    et dans la table b
    ligne1 - 06/03/05

    avec nos requetes nous aurons comme retour la ligne 1 parce que 06/03/05 n'est pas dans la tranche alors qu'une requete correcte ne retournerai pas de tuble...

    autre idée... ?

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Bonjour ,

    Tu peux me donner ton script de creation des tables et le contenu de ces dernières?

    Je m'execuse je suis trés visuel

  5. #5
    Membre éclairé 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
    Par défaut
    en fait c une vue d'une base de plusieurs Go. (la base n'est pas de moi - je creer juste des VM)

    voila un exemplede creation bidon..

    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
     
     
     
    DROP TABLE A ;
    CREATE TABLE A (
    	name	varchar2(20),
    	date_entree	date,
    	date_sortie	date
    ) ;
     
    DROP TABLE B ;
    CREATE TABLE B (
    	name	varchar2(20),
    	date_prelev	date
    ) ;
     
     
    INSERT INTO A VALUES ('123456789',TO_DATE('22/08/00','DD/MM/YY'),TO_DATE('24/08/00','DD/MM/YY')) ;
    INSERT INTO A VALUES ('123456789',TO_DATE('08/03/06','DD/MM/YY'),TO_DATE('31/03/06','DD/MM/YY')) ;
     
    INSERT INTO B VALUES ('123456789',TO_DATE('23/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('24/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('25/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('26/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('27/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('28/08/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('07/03/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('08/03/06','DD/MM/YY')) ;
    INSERT INTO B VALUES ('123456789',TO_DATE('09/03/06','DD/MM/YY')) ;

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Recupérer tous les tubles de la table B où DATET n'est incluse dans aucune periode de la table A (de DAENTR à DASOR) pour un NOIP donné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select *
    from B
    where not exists ( select rowid from a
    	  	          where b.noip = a.noip 
    			  and b.datet between a.daentr and a.dasor )

    CDLT.

  7. #7
    Membre éclairé 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
    Par défaut
    Citation Envoyé par taska
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select *
    from B
    where not exists ( select rowid from a
    	  	          where b.noip = a.noip 
    			  and b.datet between a.daentr and a.dasor )

    CDLT.
    ca a pas l'air de marché...mais tu fait une requete sur la table B avec un select rowid sur A ??? je ne crois pas que l'on peut trouver une réponse positive ??

    >> salim 11 <<
    pourquoi chercher le max ?? l'objetif est d'esclure certaine période pas forcément continue... ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Recupérer tous les tubles de la table B où DATET n'est incluse dans aucune periode de la table A (de DAENTR à DASOR) pour un NOIP donné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM B WHERE NOT EXISTS ( SELECT rowid FROM a WHERE b.noip = a.noip AND b.datet BETWEEN a.daentr AND a.dasor )

    ... selectionne tous les enregistrement de la table b pour lesquels n'existe pas la condition : ( selectionnne rowid (c'est + rapide!) de la table a où b.noip = a.noip et b.datet est entre a.daentr et a.dasor )

    Ce n'est pas ce qui est demandé ?

  9. #9
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Bonjour ,
    Oui, tu as raison, il peux nous induire en erreur

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

Discussions similaires

  1. Acces probleme de Date avec Between
    Par kahya dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/05/2007, 16h26
  2. Date et format (PROBLEME)
    Par Mynautor dans le forum DB2
    Réponses: 2
    Dernier message: 19/10/2006, 14h34
  3. Réponses: 1
    Dernier message: 05/10/2006, 04h20
  4. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  5. [SQL] date et between
    Par masseur dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/02/2006, 09h49

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