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 :

Valeur max sur regroupement mensuel [10g]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    Par défaut Valeur max sur regroupement mensuel
    Bonjour,
    Dans la requête ci-dessous, je ne parviens pas à obtenir la valeur max sur le regroupement mensuel.
    Je souhaiterais avoir la dernière valeur pour chaque mois sur la donnée "dernierevaleur"
    Merci pour votre aide.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    WITH T AS (SELECT Extract(YEAR  FROM HOPHABS.DAT) AS ANNEE,
                      Extract(MONTH FROM HOPHABS.DAT) AS MOIS,HOPHABS.DAT,
    dernierevaleur/60 as dernierevaleur
     
                      CASE 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 1 AND (hophjoun.TYPJOU != 'F')then 'LUN' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 2 AND (hophjoun.TYPJOU != 'F')then 'MAR' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 3 AND (hophjoun.TYPJOU != 'F')then 'MER' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 4 AND (hophjoun.TYPJOU != 'F')then 'JEU' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 5 AND (hophjoun.TYPJOU != 'F')then 'VEN' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 6 AND (hophjoun.TYPJOU != 'F')then 'SAM' 
    when to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')= 7 AND (hophjoun.TYPJOU != 'F')then 'DIM' 
    Else 'FERIE'
    END AS NUMJOUR,
    HOPEMPL.NOMPRE as NOM,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('1')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF = ('SPOCDG24J') THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('1')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')THEN 0.5
    else 0
    end as NBLUN ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('2')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF = ('SPOCDG24J') THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('2')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')THEN 0.5
    else 0
    end as NBMAR ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('3')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF = ('SPOCDG24J') THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('3')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')THEN 0.5
    else 0
    end as NBMER ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('4')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF = ('SPOCDG24J') THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('4')) and  HOPHJOUN.TYPJOU != 'F') and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')THEN 0.5
    else 0
    end as NBJEU ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('5')) and  HOPHJOUN.TYPJOU != 'F' and HOPHABS.MOTIF in ('SPOCDG24J')) THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('5')) and  HOPHJOUN.TYPJOU != 'F' and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')) THEN 0.5
    else 0
    end as NBVEN ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('6')) and HOPHABS.MOTIF in ('SPOCDG24J')) THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('6'))  and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')) THEN 0.5
    else 0
    end as NBSAM ,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('7'))  and HOPHABS.MOTIF in ('SPOCDG24J')) THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('7'))  and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')) THEN 0.5
    else 0
    end as NBDIM,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') not in('7','6') and  HOPHJOUN.TYPJOU = 'F')  and HOPHABS.MOTIF in ('SPOCDG24J')) THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') not in('7','6') and  HOPHJOUN.TYPJOU = 'F') and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')) THEN 0.5
    else 0
    end as NBFERIE,
    CASE
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')  in('1','2','3','4','5','7','6'))  and HOPHABS.MOTIF in ('SPOCDG24J')) THEN 1 
    WHEN ((to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french')  in('1','2','3','4','5','7','6')) and HOPHABS.MOTIF in ('SPOCDG12J','SPOCDG12N')) THEN 0.5
    else 0
    end as NBTOTG
     
     
              FROM HOPEMPL, HOPHABS, HOPHJOUN,HOPHJOUP
    WHERE HOPEMPL.MATRI = HOPHABS.MATRI
    AND HOPHJOUP.MATRI = HOPEMPL.MATRI
    AND HOPHJOUP.MATRI = HOPHJOUN.MATRI
    AND HOPHJOUP.DAT = HOPHJOUN.DAT
    AND HOPHJOUP.MATRI = HOPHABS.MATRI
    AND HOPHJOUP.DAT = HOPHABS.DAT
    AND HOPEMPL.MATRI = HOPHJOUN.MATRI
    AND HOPHABS.MATRI = HOPHJOUN.MATRI
    AND HOPHABS.DAT = HOPHJOUN.DAT
    AND HOPEMPL.SEITYPPOP in ('V','R')
    AND HOPHABS.MOTIF like 'SPOCDG%'
    /*AND HOPHABS.MOTIF = 'SPODISPOAS'*/
    AND EXTRACT(YEAR FROM HOPHABS.DAT) = '2020' /*AND EXTRACT(MONTH FROM HOPHABS.DAT) in( '05')*/
    )
    SELECT ANNEE, MOIS,NOM,SUM(NBLUN) as NBLUN,SUM(NBMAR) as NBMAR,SUM(NBMER) as NBMER,SUM(NBJEU) as NBJEU,SUM(NBVEN) as NBVEN,SUM(NBSAM) as NBSAM, SUM(NBDIM) as NBDIM, SUM(NBFERIE) as NBFERIE, SUM(NBTOTG) as NBTOTG,MAX(dernierevaleur) as dernierevaleur
    FROM T
    GROUP BY NOM,ANNEE , MOIS,dernierevaleur
    ORDER BY ANNEE/*,NBTOTG desc*/, NOM  , MOIS

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Il faut que tu enlèves dernierevaleur du GROUP BY non?

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    Par défaut
    Merci bien vu parfait.
    Bonne fin de journée.

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pour info, attention le to_char(hophabs.dat, 'D', 'NLS_DATE_LANGUAGE=french') in('5') utilise le NLS_DATE_LANGUAGE.. je me suis déjà fait avoir et j'ai du passer 1h pour comprendre d'où venait mon bug.
    Pour le retour du 'D', ce n'est pas le NLS_DATE_LANGUAGE qui rentre en jeu mais le NLS_TERRITORY (qui n'est pas passable en paramètre du TO_CHAR) ..

    Le code suivant renverra 4 (sur ma base) que je sois en French ou en English
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TO_CHAR(SYSDATE, 'D', 'NLS_DATE_LANGUAGE=french') fr, TO_CHAR(SYSDATE, 'Day', 'NLS_DATE_LANGUAGE=french') Nfr, 
          			TO_CHAR(SYSDATE, 'D', 'NLS_DATE_LANGUAGE=english') en,TO_CHAR(SYSDATE, 'Day', 'NLS_DATE_LANGUAGE=english') Nen
          FROM dual
     
    FR	4
    EN	4
    NFR	Mercredi
    NEN	Wednesday

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    Par défaut
    Bonjour,

    J'ai encore un souci sur la requête. En fait en mettant MAX(dernierevaleur) je n'obtiens pas la dernière valeur qui devrait correspondre à la dernière valeur au 31/12 par exemple.
    quelle fonction pourrai-je utiliser ?

    Merci pour vos retours.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Dans ce cas tu peux utiliser FIRST ou LAST couplé à la fonction MAX:

    MAX(dernierevaleur) KEEP (DENSE_RANK LAST ORDER BY annee, mois)

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

Discussions similaires

  1. [XL-2010] recherche d'une valeur max sur une cellule sous une condition
    Par GO GHO dans le forum Excel
    Réponses: 3
    Dernier message: 31/07/2015, 16h57
  2. [AC-2000] Valeur MAX sur 2 colonnes
    Par james68 dans le forum Access
    Réponses: 2
    Dernier message: 26/06/2015, 07h47
  3. Report studio : valeur max sur une dernière période
    Par sofiane_bfm007 dans le forum Cognos
    Réponses: 2
    Dernier message: 30/05/2010, 16h58
  4. Récupérer un valeur max sur plusieurs enregistrements
    Par wadoo dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/04/2008, 12h20
  5. Réponses: 4
    Dernier message: 28/03/2007, 15h28

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