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

Langage SQL Discussion :

Faire un select entre date du jour et semaine passée


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 364
    Points : 86
    Points
    86
    Par défaut Faire un select entre date du jour et semaine passée
    Bonjour,

    J'utilise actuellement une requête assez simple pour visualiser les volumes des campagnes des 7 derniers jours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct ACDAT, ACLIB, count (*)
    from PRODUC
    where ACDAT >= '20171124'
    group by ACDAT, ACLIB
    order by 1, 2
    ;
    J'aurais juste voulu "l'automatiser" pour ne pas avoir à changer systématiquement la date en soustrayant 7 jours à la date en cours.

    Et c'est là que la bât blesse, j'ai eu beau chercher et essayer plusieurs techniques avec sysdate, dual, to_date, etc.., rien n'y a fait.
    Je me retrouve toujours avec un message d'erreur.

    Je précise de plus que la colonne ACDAT n'est pas au format date mais au format varchar2.

    Merci d'avance à ceux qui prendront la peine de me lire.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ACDAT, ACLIB, COUNT(*) nombre
    FROM PRODUC
    WHERE TO_DATE(ACDAT, 'YYYYMMDD') > CURRENT_DATE - INTERVAL 7 DAY
    GROUP BY ACDAT, ACLIB
    ORDER BY ACDAT, ACLIB
    Le DISTINCT est inutile puisqu'il y a un GROUP BY.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 364
    Points : 86
    Points
    86
    Par défaut
    J'ai fini par modifier la requête comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select PRODUC.SFA_IT_SUIVI.ACDAT, PRODUC.SFA_IT_SUIVI.ACLIB, count (*)
    from PRODUC.SFA_IT_SUIVI
    where to_date (PRODUC.SFA_IT_SUIVI.ACDAT ,'yyyymmdd') > CURRENT_DATE - 7
    and PRODUC.SFA_IT_SUIVI.ACCAT not in ('W09', 'W15', 'W22', 'W23', 'W27', 'W30', 'W31') 
    group by PRODUC.SFA_IT_SUIVI.ACDAT, PRODUC.SFA_IT_SUIVI.ACLIB
    order by 1, 2
    ;
    et cela a fini par fonctionner.

    Merci.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select s.ACDAT, s.ACLIB, count (*)
    from PRODUC.SFA_IT_SUIVI s
    where to_date (s.ACDAT ,'yyyymmdd') > CURRENT_DATE - 7
    and s.ACCAT not in ('W09', 'W15', 'W22', 'W23', 'W27', 'W30', 'W31') 
    group by s.ACDAT, s.ACLIB
    order by 1, 2
    ;
    Comme ça c'est plus lisible, non ?
    En plus, comme vous n'avez qu'une table dans votre requête, même pas besoin d'alias !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select ACDAT, ACLIB, count (*)
    from PRODUC.SFA_IT_SUIVI 
    where to_date (ACDAT ,'yyyymmdd') > CURRENT_DATE - 7
    and ACCAT not in ('W09', 'W15', 'W22', 'W23', 'W27', 'W30', 'W31') 
    group by ACDAT, s.ACLIB
    order by 1, 2
    ;

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

Discussions similaires

  1. [MariaDB] 3 Tables + Selection entre dates
    Par superthx dans le forum Requêtes
    Réponses: 8
    Dernier message: 26/09/2016, 22h25
  2. Écart entre date du jour et période sélectionnée
    Par mano_bi dans le forum QlikView
    Réponses: 62
    Dernier message: 24/08/2015, 18h08
  3. Faire un select d'age entre deux dates
    Par linuxien_tun dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2014, 21h22
  4. [Dates] Nombre jours ouvrés entre deux dates
    Par Yali dans le forum Langage
    Réponses: 4
    Dernier message: 28/12/2005, 12h05
  5. différence durée entre date jour/date champ
    Par debdev dans le forum Access
    Réponses: 9
    Dernier message: 30/11/2005, 16h55

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