Between un chouilla complexe lol

Résolu
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 - 22 mai 2006 à 15:41
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 - 12 juin 2006 à 18:22
Bonjour,

Je cherche depuis un petit moment comment faire une certaine requpete mais je bloque

En fait, j'ai une table qui contient plusieurs champs dont un nombre de poses, un numéro de semaine et l'année tous deux associés à ce nombre de poses. Ce que je voudrais c'est faire le cumul de ce nombre de poses entre la plus vieille date et la plus récente, ce qui revient à faire le cumul du nombre de poses entre la plus petite semaine pr la plus petite année et la plus grande semaine de la plus grande année.

Et là je bloque, je vois plus comment faire : j'avais essayer entre la semaine la plus petite et la plus grande et l'année la plus petite et la plus grande, mais bien sûr ça ne donne pas ce que je souhaite, mais le cumul entre les deux semaines pour chaque année.

Quelqu'un voit-il une solution svp? Merci d'avance

8 réponses

cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
23 mai 2006 à 13:37
Et bien en fait j'y suis arrivée :)

Ce que j'ai fait c'est que j'ai fait la somme des poses pour les dates qui se situent entre ma date de début et de fin, et pour transformer ma semaine et année en date, j'ai utilisé dateadd(day,semaine*7,1/1/annee) (en concaténant l'année avec la chaine '01/01' pour que je parte du 1er janvier de l'année en question, et je lui ajoute le nombre de jours nécessaire pour arriver à la bonne semaine, d'où le semaine*7).

En tout cas, merci pour ton aide :)
3
crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
22 mai 2006 à 20:17
crilun


fait une concatenation de ton champ annee et semaine, et retransforme les en date tu as plein de fonction SQL pour ca,

tu recupere le 1er jour de ta semaine de depart et le denier jour de ta semaine de fin,

apres tu fais min() et max() pour tes champs dates concatener.

et tu fait pareil pour ta clause where.


mais pourquoi tu fais pas  simplement un SUM() de toutes tes poses
car si tu prends entre la plsu vieille date et la plus recente
obligatoirement tu as tout les enregistrements?
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
23 mai 2006 à 08:03
Ok, j'avais carrément zappé cette solution ! Je vais essayer.
Et si je fait la somme de toutes les poses entre 2 dates, c'est pour pas avoir tous les enregistrements en fait, parce que c'est entre la plus vieille et récente date d'une commande (et pas de toutes!).
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
23 mai 2006 à 08:09
Euh petite précision, quand tu dis " fait une concatenation de ton champ annee et semaine", tu veux que je crées un nouveau champ dans la base, parce que je voulais éviter en fait de devoir en rajouter. Je voulais tout faire dans la requête.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
23 mai 2006 à 11:56
crilun

non je veut dire dans la requete


SELECT

          CAST(annee AS VARCHAR(4))+CAST(semaine AS VARCHAR(2)) AS ANNEESEMAINE


je dois partir en cours la, je te ferais  un select ce soir qui te
renvoi la date du lundi de ta semaine pour ton lundi de la semaine de
depart et le vendredi pour ta semaine de fin.

      
0
crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
23 mai 2006 à 17:12
crilun

tu peut faire dateadd(week,semaine,'01/01/'+annee) aussi

mais attention tu vas avoir un pb avec ca

tu ne te retrouve pas calé sur un lundi forcement aussi la,

car si ton année commence un jeudi tu auras le jeudi de la semaine,

de plus le premier jour de l'annee n'est pas forcement dans la premiere année de la semaine,

la premiere année de la semaine est la premiere qui contient un jeudi.

enfin si dans ton cas ca ne te pose pas de pb ok, si jamais si previens
moi je te ferais ton select pour te caler sur le lundi de ta semaine.
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
23 mai 2006 à 18:54
Ok, merci beaucoup, apparemment pour l'instant ça ne me pose pas
vraiment de problème, donc ça va. Mais si jamais ça va pas, je te le
dirais :)
0
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
12 juin 2006 à 18:22
Salut,
En fait je pense que ce petit code serait suffisant le tout est dans la définition de la borne inférieur et supérieur, Je pense que c'est plus rapide car sans fonction suplémentaire, pas de probléme de premier jour de la semaine ou de premier jour de l'année. Si tu le test dis moi si ca va plus vite.
SELECT 
   SUM(Pose) 
FROM 
   TABLE
WHERE 
   (Année >@AnneDebut OR (Année=@AnneDebut AND Semaine >=@SemaineDebut))
   AND
   (Année <@AnneFin OR (Année=@AnneFin AND Semaine <=@SemaineFin))

Biensûr on remplacera @AnneDebut,@SemaineDebut,@AnneFin,@SemaineFin par les valeurs qu'il faut...
0
Rejoignez-nous