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 :

Obtenir le mois de l’année dernière


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Obtenir le mois de l’année dernière
    Bonjour,

    J’ai une colonne date au format ‘MMYYYY’ avec les dates suivantes :
    11/2018
    11/2019
    11/2020

    Je souhaite récupérer à chaque fois le mois de novembre de la dernière année.

    Exemple : Nous sommes en juin 2021 et je souhaite récupérer le mois de novembre 2020.
    Lorsque j’aurais le mois de novembre 2021 dans mes données , je souhaite récupérer ce mois de novembre 2021.

    Merci d’avance pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 156
    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 156
    Points : 1 944
    Points
    1 944
    Par défaut
    Bonjour,

    En fait il te faut celui de cette année ou si non trouvé celui de l'année dernière?

    Tu peux faire une requête de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from 
    (select *
    from t
    where col_mois in ('11' || to_char(sysdate, 'yyyy'), '11' || to_char(trunc(sysdate, 'y') - 1, 'yyyy'))
    order by to_date(col_mois, 'mmyyyy') desc
    )
    where rownum = 1

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Bonjour vanagreg,
    Merci pour ton retour.

    J'ai une question concernant ta requête .
    Lorsque nous serons en decembre 2021 , ça prendra le mois de novembre 2020 ?
    Car si nous sommes en décembre 2021, il faudrait prendre le mois de novembre 2021.

    En gros, chaque année je souhaite prendre le derniers mois de novembre

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 156
    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 156
    Points : 1 944
    Points
    1 944
    Par défaut
    Oui ça prendra bien novembre 2021. En gros on cherche novembre de l'année courante, et novembre de l'année dernière. On trie par mois le plus récent, et on prend alors le premier. Si novembre 2021 n'y est pas, on prendra alors novembre 2020. Mais si novembre 2020 n'y est pas, la requête ne ramènera rien.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Ok d'accord, merci

    J'ai essayé la requête mais j'obtiens aucune valeur.
    Voici ce que j'ai dans ma colonne normalement
    Nom : 1.PNG
Affichages : 104
Taille : 51,0 Ko

    Et voici ce que j'obtiens en modifiant votre requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * from 
    (select invoice_month
    from dm_invoice_pat
    where prestation_rgpt ='T'
    and invoice_month in ('11' || to_char(sysdate, 'yyyy'), '11' || to_char(trunc(sysdate, 'y') - 1, 'yyyy'))
    order by to_date(invoice_month, 'mm/yyyy') desc
    )
    where rownum = 1
    Nom : 2.PNG
Affichages : 100
Taille : 79,4 Ko

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 156
    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 156
    Points : 1 944
    Points
    1 944
    Par défaut
    ok tu as un slash, il faut l'ajouter alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * from 
    (select invoice_month
    from dm_invoice_pat
    where prestation_rgpt ='T'
    and invoice_month in ('11/' || to_char(sysdate, 'yyyy'), '11/' || to_char(trunc(sysdate, 'y') - 1, 'yyyy'))
    order by to_date(invoice_month, 'mm/yyyy') desc
    )
    where rownum = 1

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Avec un case c'est plus optimisé je pense
    Tous les mois 1-10 : On prend le premier jour de l'année et on enlève 2 mois
    Les mois 11 et 12 : On prend le premier jour de l'année et on rajoute 10 mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADD_MONTHS(TRUNC(ladate, 'RR'), CASE WHEN EXTRACT(MONTH FROM ladate) IN (11, 12) THEN 10 ELSE -2 END)
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ladate, ADD_MONTHS(TRUNC(ladate, 'RR'), CASE WHEN EXTRACT(MONTH FROM ladate) IN (11, 12) THEN 10 ELSE -2 END)
    from (
    SELECT ADD_MONTHS(trunc(sysdate, 'MM'), -15 + level) ladate fROM dual connect by level < 30) laTable
    On peut aussi découper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE EXTRACT(MONTH FROM ladate)
    		WHEN 11 THEN ladate
    		WHEN 12 THEN ADD_MONTHS(ladate, -1)
    		ELSE ADD_MONTHS(TRUNC(ladate, 'RR'), -2)
    		END

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/01/2010, 10h47
  2. Obtenir le mois courant en Latex
    Par gonadostimuline dans le forum Mise en forme
    Réponses: 0
    Dernier message: 11/12/2007, 18h30
  3. Obtenir la lettre de la dernière colonne vide.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/10/2007, 08h01
  4. Obtenir le Mois d'avant
    Par zooffy dans le forum Access
    Réponses: 6
    Dernier message: 03/01/2007, 12h36
  5. MySQL: obtenir les résultats de la dernière insertion
    Par TNorth dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/05/2006, 17h44

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