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 :

Extraire les deux dates les plus récentes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2021
    Messages : 8
    Par défaut Extraire les deux dates les plus récentes
    Bonjour,

    Dans ma requête ci jointe, j'extrais les éléments correspondants à la date la plus récente.
    Cependant, l'objectif est de comparer les éléments de la date la plus récente avec la précédente.

    Code sql : 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
    select distinct 
                   C.REFERENCE as NUM_EDL
                 , DECODE(A.STATUT,1,'actif',2,'en cours de modification',3,'en cours de cessation') AS STATUT_CONTRAT
                 , A.DATECREATION
                 , F.LIBELLE as TYPE_COMPTEUR
                 , MAX(E.DATERELEVE) as DATE_RELEVE
                 , G.LIBELLE as TYPE_INDEX
                 , MAX(G.VALEUR) KEEP (DENSE_RANK LAST ORDER BY E.DATERELEVE) AS INDEX_CONSO   
    from
         VRP_CONTRAT                            A
         left join CONTRAT_ESPACESDELIVRAISON   B  on  B.SOURCE = A.ID
         left join VRP_ESPACEDELIVRAISON        C  on  C.ID = B.DEST
         left join VRS_CONTRAT_RELEVES          D  on  A.ID = D.SOURCE
         left join VRP_RELEVE                   E  on  D.DEST = E.ID
         left join VRS_CONFIGURATIONMATERIELLE  F  on  F.ID = E.PACM_ID
         left join VRS_GRANDEURPHYSIQUE         G  on  G.RELEVE_ID = E.ID
    where A.STATUT in (1, 2, 3) 
          and F.DATEFIN is null 
          and F.LIBELLE in ('BT HP/HC Electronique', 'BT HP/HC Electromécanique') 
          and E.NATURERELEVE in (1,6,41)
          and E.STATUTRELEVE in (1, 3)  
          and lower(G.LIBELLE) like '%index nrj active%' 
     
    and  (A.CODEGRD = 'G-EDF' or A.CODEFOURNISSEUR = 'F-EDF') and mod(A.ETATOBJET,2)=0  
    and  (C.CODEGRD = 'G-EDF' or C.CODEFOURNISSEUR = 'F-EDF') and mod(C.ETATOBJET,2)=0
     
    GROUP BY C.REFERENCE
             ,A.STATUT
             ,A.DATECREATION
             ,F.LIBELLE
             ,G.LIBELLE

    Je me dit que je pourrais faire une requête imbriquée avec l'une qui extrait la dernière date, l'autre qui récupère toutes les dates sauf la dernière et dont j'extrais la dernière (donc l'avant dernière).
    J'ai l'idée, mais je ne vois pas comment la réaliser ...
    Si quelqu'un peut m'aider svp

  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
    Bonsoir,

    Je ne suis pas sûr de savoir si tu souhaites les 2 lignes les plus récentes où une seule ligne avec la valeur précédente en tant qu'autre colonne. Pour la première solution, tu peux utiliser la fonction analytique ROW_NUMBER:

    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
    with v as (
    select      C.REFERENCE as NUM_EDL
                 , DECODE(A.STATUT,1,'actif',2,'en cours de modification',3,'en cours de cessation') AS STATUT_CONTRAT
                 , A.DATECREATION
                 , F.LIBELLE as TYPE_COMPTEUR
                 , E.DATERELEVE
                 , G.LIBELLE as TYPE_INDEX
    			 , G.VALEUR as INDEX_CONSO
                 , ROW_NUMBER() OVER (PARTITION BY C.REFERENCE, A.STATUT, A.DATECREATION, F.LIBELLE as TYPE_COMPTEUR, G.LIBELLE ORDER BY E.DATERELEVE DESC) AS rn   
    from
         VRP_CONTRAT                            A
         left join CONTRAT_ESPACESDELIVRAISON   B  on  B.SOURCE = A.ID
         left join VRP_ESPACEDELIVRAISON        C  on  C.ID = B.DEST
         left join VRS_CONTRAT_RELEVES          D  on  A.ID = D.SOURCE
         left join VRP_RELEVE                   E  on  D.DEST = E.ID
         left join VRS_CONFIGURATIONMATERIELLE  F  on  F.ID = E.PACM_ID
         left join VRS_GRANDEURPHYSIQUE         G  on  G.RELEVE_ID = E.ID
    where A.STATUT in (1, 2, 3) 
          and F.DATEFIN is null 
          and F.LIBELLE in ('BT HP/HC Electronique', 'BT HP/HC Electromécanique') 
          and E.NATURERELEVE in (1,6,41)
          and E.STATUTRELEVE in (1, 3)  
          and lower(G.LIBELLE) like '%index nrj active%' 
     
    and  (A.CODEGRD = 'G-EDF' or A.CODEFOURNISSEUR = 'F-EDF') and mod(A.ETATOBJET,2)=0  
    and  (C.CODEGRD = 'G-EDF' or C.CODEFOURNISSEUR = 'F-EDF') and mod(C.ETATOBJET,2)=0
    )
    SELECT NUM_EDL, 
           STATUT_CONTRAT,
    	   DATECREATION,
    	   TYPE_COMPTEUR,
    	   DATERELEVE,
    	   TYPE_INDEX,
    	   INDEX_CONSO
    FROM v
    WHERE rn <= 2;

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2021
    Messages : 8
    Par défaut
    Je ne suis pas sûr de savoir si tu souhaites les 2 lignes les plus récentes où une seule ligne avec la valeur précédente en tant qu'autre colonne. Pour la première solution, tu peux utiliser la fonction analytique ROW_NUMBER:
    Oui c'est effectivement la première solution.
    J'ai bien vu sur internet la fonction ROW_NUMBER() mais je pensais qu'il fallait l'utiliser dans une requête simple (non imbriquée) de plus je pensais qu'il fallait mettre un seul champ dans le PARTITION mais visiblement non.

    J'ai également entendu parler des CTE. C'est visiblement ce que tu as utilisé. Je me renseignerais davantage dessus pour mieux comprendre son fonctionnement et dans quel cas l'utiliser.

    En tout cas ma requête fonctionne . Merci beaucoup pour ton aide
    (Requête exacte du 1er coup )

Discussions similaires

  1. [AC-2013] extraire les dates les plus récentes d'un enregistrement
    Par claireflore dans le forum Access
    Réponses: 1
    Dernier message: 02/08/2014, 06h56
  2. deux dates les plus récente Webi
    Par SIKZA dans le forum Webi
    Réponses: 2
    Dernier message: 28/08/2012, 11h09
  3. Analyse Croisée sur 4 dates les plus récentes
    Par popofpopof dans le forum Access
    Réponses: 2
    Dernier message: 30/07/2007, 22h46
  4. Comment garder les dates les plus récentes?
    Par nikobell dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/06/2007, 10h06
  5. requete : selectioner les dates les plus récentes
    Par aujero dans le forum Access
    Réponses: 6
    Dernier message: 01/03/2006, 10h40

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