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 :

Coup de pouce pour une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut Coup de pouce pour une requête
    Bonsoir,

    Je suis resté bloqué plusieurs heures aujourd'hui sur une requête :

    Il y'a donc une table qui présente (entre autre) ces trois colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID   |   DATE_DEBUT   |   DATE_FIN
    L'objectif est de compter pour chaque jour J (YYYY-MM-DD) les IDs satisfaisant la condition suivante : DATE_DEBUT <= J && J < DATE_FIN

    En gros déterminer pour chaque jour les id "en cours".
    Ceux qui sont débutées mais non terminé.

    J'ai essayé de chercher un peu sur le net mais impossible de faire comprendre à google ce que je cherche (quel nom pour un type de requête pareille ?) ... Après m'être acharné en testant des sous requêtes ou en numérotant les jours j'ai fini par le faire en PHP ...

    Mais par curiosité j'aimerais savoir comment réaliser une requête pareil simplement ou en passant par des fonctionnalités spécifiques à oracle

    Donc voilà si vous avez une idée, ou des pistes des recherches sur le web je vous en serais vraiment reconnaissant !
    Merci d'avance !

    Cdt.
    [EDIT : syntaxe]

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    sysdate te donne la date du jour et count(*) va te permettre de compter les ID.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count(ID)
    FROM MaTable
    WHERE date_debut <= to_char(sysdate,'YYYY-MM-DD')
    AND  date_fin > to_char(sysdate,'YYYY-MM-DD')
    Je te conseille de regarder ces tutos qui sont vraiment bien et t'aideront à progresser. Car ici ce que tu demandes est la base en SQL.

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    J'ai peur de ne pas bien comprendre le besoin car la solution me parait trop simple.
    Pour récupérer pour un jour J donné les ID en cours, en supposant que les dates ne contiennent pas d'heures (auquel cas il faudrait un peu plus de précision sur le fonctionnement souhaité), la condition suivante suffit :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Where J >= Trunc (Date_Debut)
      And J < Nvl (Date_Fin, J+1)
    L'instruction NVL permettant de prendre en compte les cas où la date de fin n'est pas renseignée.
    Qu'est-ce que je n'ai pas compris dans la complexité ?

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    Ton code n'est pas très logique car tu met un trunc sur la date de début mais pas sur la date de fin.

    De plus comme il a précisé que J est sous le format (YYYY-MM-DD) je suppose que c'est le format de ces deux colonnes, donc pour moi pas besoin de faire trunc.

    Et rien ne nous permet de dire que date de debut est non nulle alors que date de fin peut être nulle, dans ce cas il faut mettre nvl sur les deux conditions.

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    L'énoncé est trop ambigüe pour apporter une réponse précise.

    Je vois plus le problème comme ceci :
    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
     
    Table de données
    ID     Date début    Date Fin
    1      01/02/2012   29/02/2012
    2      15/02/2012   15/03/2012
    3      01/03/2012   31/03/2012
    4      03/03/2012   30/04/2012
     
    Résultat attendu :
    Date       Nombre d'ID
    01/01/2012    0
    [..]
    29/02/2012    2
    01/03/2012    1
    02/03/2012    1
    [..]
    14/03/2012    3
    15/03/2012    3
    16/03/2012    2
    [..]
    Pour réaliser ceci il faut une table annexe contenant le calendrier que l'on joint avec la table des data (Si c'est belle et bien ça la demande...)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses !
    Je suis désolé je pensais avoir correctement énoncé le problème ...

    Citation Envoyé par Scriuiw Voir le message
    L'énoncé est trop ambigüe pour apporter une réponse précise.

    Je vois plus le problème comme ceci :
    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
     
    Table de données
    ID     Date début    Date Fin
    1      01/02/2012   29/02/2012
    2      15/02/2012   15/03/2012
    3      01/03/2012   31/03/2012
    4      03/03/2012   30/04/2012
     
    Résultat attendu :
    Date       Nombre d'ID
    01/01/2012    0
    [..]
    29/02/2012    2
    01/03/2012    1
    02/03/2012    1
    [..]
    14/03/2012    3
    15/03/2012    3
    16/03/2012    2
    [..]
    Pour réaliser ceci il faut une table annexe contenant le calendrier que l'on joint avec la table des data (Si c'est belle et bien ça la demande...)
    C'est exactement ça ! (J'aurais vraiment du mettre un exemple aussi ça aurait été plus clair).
    Malheureusement je ne suis pas autorisé à créer quoi que ce soit dans ces bases .
    Je vais tenter de le faire en PL/SQL

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    @ithurts:
    Dans l'exemple donne, pour le 1er et le 2 Mars on devrait aps avoir les ID 2 et 3 qui correspondent?

  8. #8
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Pour l'année en cours tu peux générer un calendrier virtuel de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT trunc(sysdate,'y')-1+level dt
    FROM    dual
    CONNECT BY LEVEL <= add_months(trunc(sysdate,'y'),12) - trunc(sysdate,'y');
    Après il n'y a plus qu'à faire de la jointure avec ce que tu désires faire


    EDIT : Exact Ram7s il y a deux ID pour le 01 et 02/03

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

Discussions similaires

  1. Coup de pouce pour faire une requête
    Par Rymaya dans le forum SQL
    Réponses: 8
    Dernier message: 12/04/2012, 09h31
  2. Un coup de main pour une requête ?
    Par kibla dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/12/2010, 13h43
  3. Cherche un coup de pouce pour une page portal
    Par Kernel_BE dans le forum Ext JS / Sencha
    Réponses: 0
    Dernier message: 19/11/2008, 12h25
  4. besoin d'un coup de main pour une requête ;)
    Par Fabouney dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 23h14
  5. Besoin d'1 coup de pouce pour realiser une importation de BD
    Par gizmorambo dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/08/2005, 14h07

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