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 :

requete fonction d'aggregation:MAX


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut requete fonction d'aggregation:MAX
    Bonjour,

    Je dois récupérer le statut des personnes en fonction d'une date.
    En gros, je dois voir le dernier statut des personnes.
    Si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select statut_lib, salarie_id, temps_id
    from frh f, salarie s, drh_statut d
    where s.sal_id=f.salarie_id
    and f.statut_id=d.statut_id
    and f.statut_id is not null
    group by statut_lib, salarie_id, temps_id
    having MAX(temps_id) <= '31/12/2006'
    Il m'affiche tous les statuts des personnes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    STATUT_LIB  SALARIE_ID    TEMPS_ID
    ETAM	68	1997/01/02 00:00:00.000
    CADRE	68	2002/04/01 00:00:00.000
    ETAM	69	2000/01/10 00:00:00.000
    CADRE	70	1997/09/29 00:00:00.000
    ETAM	71	1993/05/24 00:00:00.000
    CADRE	71	2003/02/01 00:00:00.000
    ETAM	72	2000/11/06 00:00:00.000
    alors que je veux seulement le dernier statut...

    EX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    STATUT_LIB  SALARIE_ID    TEMPS_ID
    CADRE	68	2002/04/01 00:00:00.000
    ETAM	69	2000/01/10 00:00:00.000
    CADRE	70	1997/09/29 00:00:00.000
    CADRE	71	2003/02/01 00:00:00.000
    ETAM	72	2000/11/06 00:00:00.000
    Si vous avez une idée...MErci d'avance!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    elle vient de quelle table ta donnée temps_id ?

    sinon ça donne quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT statut_lib, salarie_id, temps_id
    FROM frh f, salarie s, drh_statut d
    WHERE s.sal_id=f.salarie_id
    AND f.statut_id=d.statut_id
    AND f.statut_id IS NOT NULL
    and temps_id = (select max(temps_id)
                           from ????
                           where ???? = salarie_id)

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Merci bcp ca fonctionne...
    En effet j'avais deja fait une sous requete mais j'avais oublié la jointure !!

    Thanks!

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Voila qui devrait faire l'affaire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    FROM (salarie_id, statut_lib, temps_id, ROW_NUMBER() OVER (PARTITION BY salarie_id ORDER BY temps_id DESC) num
    FROM frh f, salarie s, drh_statut d
    WHERE s.sal_id=f.salarie_id
    AND f.statut_id=d.statut_id
    AND f.statut_id IS NOT NULL
    AND temps_id <= '31/12/2006')
    WHERE num = 1;
    Je fais un SELECT * pour que tu vois à quoi sert ROW_NUMBER

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

Discussions similaires

  1. Fonction MIN et MAX résultat improbable
    Par UNi[FR] dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 24/04/2006, 11h38
  2. Coupler les fonction COUNT et MAX
    Par Pascal Lob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/03/2006, 09h45
  3. Réponses: 5
    Dernier message: 13/02/2006, 13h59
  4. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  5. [hibernate] utilisation des fonctions d'aggregation
    Par osopardo dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/08/2005, 09h41

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