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 :

String + SYSDATE + NVL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Par défaut String + SYSDATE + NVL
    Bonjour à tous,

    Le problème est trop complexe pour moi, alors je fais appel à vous si vous le permettez.

    Voici mon problème :

    Dans la base d'oracle :

    Colonnes : || CD_A || CD_B || CD_C || CD_D || CD_E || CD_F || CD_G || CD_H ||
    Type : CD_A(str) CD_B(str) CD_C(str) CD_D(str) CD_E(DATE) CD_F(DATE) CD_G(str) CD_H(str)

    Les colonnes de type DATE : DD/MM/YYYY par exemple 10/05/2010

    Les 5 premières colonnes constituent la clé primaire.

    J'aimerais faire une requête alors :
    - Au début filtrer par la colonne "CD_A"
    - Ensuite que SYSDATE se trouve entre "CD_E" et "CD_F"
    - Et puis si "CD_F" n'est pas précisée, alors il sera à SYSDATE+1
    - Ce n'est pas fini, s'il y en a plusieurs qui ont les mêmes CD_A CD_B et CD_C, alors on prend uniquement celui qui a date la plus récente.

    Voilà voilà, tout ça en une seule requête bien entendu.

    Je compte sur vous.
    Par avance, 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
    Vous avez bien décomposer votre problème, vous pouvez décomposer l'écriture de la requête de la même manière.

    Essayez de transcrire un par un les points en SQL, on vous aidera là où ça bloque.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Par défaut
    Merci Waldar pour votre réponse, pour tout vous dire je suis un "bleu" en SQL.
    Mais avec votre conseil, je me lance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM MA_TABLE WHERE CD_A = 'ma_condition_1'
    AND SYSDATE BETWEEN CD_E AND NVL(CD_F,SYSDATE+1)
    Par contre, pour la dernière condition je ne sais vraiment pas comment m'y prendre.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Ce que vous faites pour les 2 premières conditions me semble pas mal.
    Par contre, pour la dernière condition, il y a plusieurs façons de faire, plus ou moins compliquées, mais qui dépendent de ce que vous mettez dans votre SELECT (est-ce que c'est vraiment * ou pas ?). Et puis, la date la plus récente de quelle colonne (CD_E, CD_F ?)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Par défaut
    Merci dgi77
    Oui je récupère vraiment * (liste d'objets d'une classe persistante d'Hibernate)
    Pour la dernière condition, elle est sur CD_E.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Dans ce cas-là, je vois bien un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT * FROM MA_TABLE WHERE CD_A = 'ma_condition_1'
    AND SYSDATE BETWEEN CD_E AND NVL(CD_F,SYSDATE+1)
    AND (CD_A, CD_B, CD_C, CD_E) IN 
    (
         SELECT CD_A, CD_B, CD_C, MAX(CD_E)
         FROM MA_TABLE WHERE CD_A = 'ma_condition_1'
         AND SYSDATE BETWEEN CD_E AND NVL(CD_F,SYSDATE+1)
    )

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

Discussions similaires

  1. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  2. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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