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

Requêtes et SQL. Discussion :

Sommer sur 4 semaines précédentes à cheval sur 2 années


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2014
    Messages : 75
    Points : 49
    Points
    49
    Par défaut Sommer sur 4 semaines précédentes à cheval sur 2 années
    Bonjour,

    J'ai un probleme en essayant de sommer des valeurs de 4 semaines consécutives au passage d'une année à l'autre.

    Je dispose d'une table Tonnages où les champs Client, Volume, numéro de semaine, numéro d'année sont remplis automatiquement à partir d'un fichier excel.

    Je traite ensuite les numéros de semaine et d'année afin de générer une date correspondant au premier jour de la semaine avec un module.

    J'aimerais ensuite sommer les volumes sur 4 semaines consécutives (en demandant pour l'instant à l'utilisateur d'entrer le numéro de semaine) de l'année N et N-1 (afin de comparer).
    Par exemple si l'utilisateur entre "5", la requete va calculer la somme des volumes de la semaine 1 à 4 pour chaque année.

    Cela fonctionne pour moi mais je rencontre un problème lorsque la "fenetre" de 4 semaines est sur 2 années.
    Ex: si l'utilisateur entre "2", la requete doit calculer la somme des volumes 50/année prec., 51/année prec., 52/année prec et 01/année.
    Dans mon cas la requete ne franchit pas la "barrière" entre les 2 années, ne conservant que le volume 01/année.

    Quelqu'un peut m'aider?

    Voici mon module pour générer la date:
    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
    Function convDate( _
      ByVal intAnnee As Long, _
      Optional ByVal intSemaine As Long = 1)
     
      Dim dt As Date
     
      ' Trouver le 1er jour de la semaine 1 de l'année
      ' (pas forcément le 1/1/aaaa en France !)
      dt = DateSerial(intAnnee, 1, 1)
      While DatePart("ww", dt, vbMonday, vbFirstFourDays) <> 1
        dt = dt + 1
      Wend
     
      ' Calculer le 1er jour de la semaine demandée
      dt = dt - DatePart("w", dt, vbMonday) + 1
      dt = dt + 7 * (intSemaine - 1)
     
      convDate = dt
    End Function
    Et voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tonnages.Client, Sum(Tonnages.Volume) AS SommeDeVolume, Tonnages.numAnnee
    FROM Tonnages
    WHERE Tonnages.tDate>=DateAdd("ww",-4,convDate(Tonnages.numAnnee,[SemaineACalculer])) And Tonnages.tDate<convDate(Tonnages.numAnnee,[SemaineACalculer])
    GROUP BY Tonnages.Client, Tonnages.tDate, Tonnages.numAnnee;
    En vous remerciant d'avance de vos réponses,

    Ostrich95

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour ostrich95,

    La solution est de convertir en date avant le Where clause. Supposons un champ nommé Date_Conv qui reprend ta fonction tu auras ainsi des dates exploitables avec la fonction DateAdd.

    Bonne journée

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2014
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Bonjour Robert1957,

    merci de ta réponse mais j'ai un problème : j'ai créé un champ dateconvertie dans ma requête mais, à l'exécution, il m'est demandé de renseigner [SemaineACalculer] (ce qui est normal) mais aussi dateconvertie (ce qui n'est pas normal!).

    Voici le SQL de ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tonnages.Client, Sum(Tonnages.Volume) AS SommeDeVolume, Tonnages.numAnnee,convDate(Tonnages.numAnnee,[SemaineACalculer]) AS dateconvertie
    FROM Tonnages
    WHERE Tonnages.tDate>=DateAdd("ww",-4,dateconvertie) And ( Tonnages.tDate<dateconvertie)
    GROUP BY Tonnages.Client, Tonnages.tDate, Tonnages.numAnnee;
    Ostrich95

Discussions similaires

  1. Nb de jours d'une semaine a cheval sur 2 mois ?
    Par mederik dans le forum Cognos
    Réponses: 0
    Dernier message: 16/04/2010, 15h19
  2. Nb de jours d'une semaine a cheval sur 2 mois ?
    Par mederik dans le forum SQL
    Réponses: 2
    Dernier message: 16/04/2010, 15h08
  3. [AC-2000] Requette sur semaine précédente
    Par metallicavid dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/02/2010, 17h18
  4. [AC-2003] Regroupement de semaines à cheval sur 2 mois
    Par tarnx dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/01/2010, 16h51
  5. Réponses: 12
    Dernier message: 31/03/2006, 20h02

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