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 :

Requête sur la semaine dernière [12c]


Sujet :

SQL Oracle

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut Requête sur la semaine dernière
    Bonjour,

    Je ne suis pas très à l'aise avec le sql, j'ai cherché un peu avant de poster mais je n'ai pas trouvé mon bonheur (je ne dois pas utiliser les bons mots-clé)
    Mon problème est simple, je vais devoir lancé une requête toutes les semaines (normalement le lundi) qui prend les données de la semaine précédente.
    Pour l'instant j'utilise un prompt et j'écris manuellement les date a chaque exécution, étant donné que c'est toujours sur la période de la semaine précédente j'aurais aimé me passer des prompt pour gagner du temps, mais je ne sais pas comment faire.
    Etant donné que normalement la requête sera lancé tout les lundi, j'avais pensé à utiliser sysdat pour récupérer la date d'aujourd'hui et y enlever sept jours / un jour pour avoir la semaine précédente, normalement ça fonctionne mais par exemple lundi prochain est férié, la requête sera donc lancée mardi, et ma bidouille ne fonction plus puisqu'elle donnerait les résultat du mardi au mardi.
    D'où ma question, existe-t-il un moyen de récupérer la date du lundi de la semaine précédente ? la date du dimanche ?

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    accept date_debut prompt "Indiquez la date de début de la période ciblée (AAAAMMJJ) : "
    accept date_fin prompt "Indiquez la date de fin de la période ciblée (AAAAMMJJ) : "
    [...]
    WHERE to_char(date,'YYYYMMDD')  BETWEEN '&&date_debut' AND '&&date_fin'

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Bonjour,

    La requête suivante donne le 1er jour de la semaine en fonction de la date du jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TRUNC(sysdate, 'iw') from dual;
    Pour le lundi de la semaine dernière il suffit de soustraire 7 jours à sysdate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TRUNC(sysdate-7, 'iw') from dual;
    Attention toutefois à bien vérifier les paramètres de votre base (Le 1er jour peut être un dimanche selon leurs valeurs)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Attention toutefois à bien vérifier les paramètres de votre base (Le 1er jour peut être un dimanche selon leurs valeurs)
    Non, le paramètre IW se base sur la norme ISO qui stipule un début de semaine le lundi.

    C'est avec la fonction to_char(..., 'D') que le paramétrage NLS_TERRITORY rentre en jeu.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Merci beaucoup, c'est exactement ce que je cherchais

    J'obtient donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        WHERE to_char(ma_date,'YYYYMMDD')  BETWEEN (select TRUNC(sysdate-7, 'iw') from dual) AND (select TRUNC(sysdate-7, 'iw')+6 from dual)

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Pour des questions de performances, il faut éviter d'appliquer des transformations sur la colonne, et il faut les mettre à la place sur les valeurs de comparaison.
    Par ailleurs, inutile de refaire un SELECT FROM DUAL.


    On ferait donc plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where ma_date between trunc(sysdate -7, 'IW') and trunc(sysdate, 'IW') - interval '1' second
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where ma_date >= trunc(sysdate -7, 'IW') 
      and ma_date  < trunc(sysdate, 'IW')

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Pour des questions de performances, il faut éviter d'appliquer des transformations sur la colonne, et il faut les mettre à la place sur les valeurs de comparaison.
    Par ailleurs, inutile de refaire un SELECT FROM DUAL.
    Merci, j'en prends bonne note.

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

Discussions similaires

  1. Requête sql sur une semaine
    Par anto2b dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/03/2012, 15h46
  2. Requête DateTime sur une semaine groupée par jour et par heure
    Par cerealkiller dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/08/2011, 15h54
  3. Indemnité de stage non payée sur les 6 dernières semaines
    Par mvk44 dans le forum Droit du travail
    Réponses: 3
    Dernier message: 25/01/2011, 16h34
  4. Réponses: 16
    Dernier message: 03/06/2009, 05h14
  5. Réponses: 6
    Dernier message: 11/04/2007, 16h54

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