requete redondante - SQL/NoSQL - Programmation
Marsh Posté le 04-08-2009 à 08:39:41
ReplyMarsh Posté le 04-08-2009 à 08:51:53
Taz a écrit : Tu ferais mieux de faire un group by extraire_le_mois(date) |
j'avais pensé à proposer ca, mais j'avais peur de dire une betise... pour ma culture, ca peut gagner beaucoup en temps d'exécution et sur le calcul du plan et tout et tout?
Marsh Posté le 04-08-2009 à 12:36:57
merci pour vos réponses, il faut que je m'explique peut etre mieux parce que je n'ai pas compris l'interet d'un group by, je n'ai rien à grouper, ne vous fiez pas au code que j'ai mis c'était pour illuster un peu vaguement;
le probleme est : j'ai cette requete qui me renvoie une ligne pour la date 31/03/2001
je dois la faire tourner sur les 60 mois suivants , et donc je vais tourner la requete 60 fois pour avoir 60 ligne ( chaque ligne je la copie sur un fichier excel avant de passer au mois suivant)
moi, je cherche quelque chose qui me permet d'avoir les 60 lignes à la fois , cela fait pe,ser directement à une boucle pour les mois add_months(mois,i) , et des unions sur les lignes pour avoir une seule table à la fin
peut etre je suis sur la bonne piste (il faut chercher dans ce cas comment integrer UNION dans la boucle) , ou peut etre que je suis à coté
Marsh Posté le 04-08-2009 à 14:34:43
fais plutot un truc genre ci-dessous, si je comprend bien tes données un group by ne renverrait pas un résultat correct car tu veux des résultats sur des périodes qui peuvent se chevaucher( si c'est pas le cas alors oui fais un group by)
Code :
|
Marsh Posté le 04-08-2009 à 14:41:03
pataluc a écrit : |
Oui à fond !
Marsh Posté le 04-08-2009 à 16:22:08
ay casimimir , c'est un peu quelque chose comme ça qui me faut, j'ai pas les privileges pour faire un INSERT, en core moins un CREATE TABLE, que des SELECT, c'est pour ça que je parle de Union ou union all
pour faire simple , ma requete en gros est du type :
select max(montant)
from ma_table
where date > ma_date ;
franchement je bloque sur le group by, ça m'obligera de tout recommencer ...
Marsh Posté le 03-08-2009 à 22:55:45
Bonjour,
j'ai une requete sous Oracle qui retourne quatre champs en Une ligne
Cette requete je dois la faire tourner 60 fois ( pour les 5 ans * 12 mois suivants le 31/03/2009 ) , les mois sot consecutifs
Et donc j’aimerai bien automatiser cette tache
Ps : ma requete est tres simplifié ici , à la base pour un seul select ( sur un mois) elle prend vers les 4 ou 5 minutes
et donc j'ai fait vite fait quelque chose du genre :
BEGIN
FOR i IN 1 .. 60 LOOP
Select max(var)
From table1
Where date > ‘2009/03/31’
Union
Select max(var)
From table1
Where date > add_months(‘2002/03/31’,i)
End loop;
End;
je ne sais pas si c'est une bonne piste , merci de vouloir m'aider