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 :

Fonction analytique et recherche max min


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut Fonction analytique et recherche max min
    Bonjour, j'ai une table t_historique.
    Dans cette table j'ai les champs c_identifiant,c_affectation, c_date, c_valeur.
    J’essaye en vain de trouver les dates de début et de fin de chaque affectation avec la valeur c_valeur qui correspond.

    A titre d'exemple du 01/01/2011 au 31/03/2013 l'affectation est 01 puis du 01/04/2013 au 31/05/2013 l'affectation est à 02 puis à partir du 01/06/2013 l'affectation est à nouveau à 01.
    Comment faire pour avoir, avec un paramètre année (2013 par ex) :
    du 01/01/2013 au 31/05/2013 c_affectation = 01 c_valeur au 01/01/2013 = 100 c_valeur au 31/03/2013 = 50
    du 01/04/2013 au 31/05/2013 c_affectation = 02 c_valeur au 01/04/2013 = 40 c_valeur au 31/05/2013 = 30
    du 01/06/2013 au 31/12/2013 c_affectation = 01 c_valeur au 01/06/2013 = 40 c_valeur au 31/03/2013 = 10

    J'ai essayé avec keep dense... mais en vain.

    Est-ce possible ? merci

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Comment sont gérées vos Affectations ?
    Par Trimestre ? Je ne comprends pas bien !

    Vous auriez un Jeu de Données et un exemple ?

    Cdt,
    Chtulus
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut
    Bonjour,

    Les affectations sont gérer dans la table jour par jour.
    C'est à dire que un matricule à une ligne par jour avec son affectation et sa valeur c_valeur.
    merci

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut,

    Où est-ce que ça coince avec keep ?
    Peux-tu nous donner la requête que tu as essayée et qui ne te donne pas les résultats que tu attends (et aussi indiquer ce qui est différent de ce que tu cherches)

  5. #5
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut
    Bonjour,
    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  c_identifiant,c_affectation,
    MIN(c_date) KEEP (DENSE_RANK FIRST ORDER BY c_affectation) "Deb",
    MAX(c_date) KEEP (DENSE_RANK FIRST ORDER BY c_affectation) "Fin"
    FROM t_historique
    WHERE c_identifiant = '006966' AND EXTRACT(YEAR FROM c_date) ='2013'
    Group By c_identifiant,c_affectation
    Cette requête me renvoie :
    Identifiant affectation Deb Fin
    ---------- ---------------------------------------- -------- --------
    006966 02 01/04/13 31/05/13
    006966 01 01/01/13 31/12/13

    Je devrais avoir 3 ligne pour cet identifiant :

    Identifiant affectation Deb Fin
    ---------- ---------------------------------------- -------- --------
    006966 02 01/04/13 31/05/13
    006966 01 01/01/13 31/03/13
    006966 01 01/06/13 31/12/13

    Comment faire ?
    merci

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    En fait, tu sembles chercher des ruptures dans ta table.
    Essaie avec lead / lag plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT  c_identifiant,c_affectation,c_date dtdeb, lead(c_date, 1) over(partition by c_identifiant order by c_date) dtfin
    FROM t_historique
    WHERE c_identifiant = '006966' AND EXTRACT(YEAR FROM c_date) ='2013'
    Et ça serait encore plus simple si tu nous donnais un vrai jeu de données issu de ta table...

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

Discussions similaires

  1. Recherche de Min et Max en théorie, mais en pratique ?
    Par dasycarpum dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 01/01/2012, 18h34
  2. recherche de fonction analytique
    Par pat29 dans le forum SQL
    Réponses: 7
    Dernier message: 01/03/2011, 15h11
  3. fonction FIND et MAX/MIN
    Par HAL-9000 dans le forum MATLAB
    Réponses: 12
    Dernier message: 07/10/2010, 21h22
  4. Recherche du min dans une fonction parabolique
    Par julien_julio dans le forum Excel
    Réponses: 2
    Dernier message: 26/04/2010, 15h02
  5. la fonction Max/Min sur des dates
    Par chabagrou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2007, 18h38

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