2009-10-06 11 views
0
select CAST(convert(varchar, a.rechargedate, 112) as datetime)as RechargeDate, 
COUNT(distinct a.mobileno) AS UnitTotal, 
SUM(a.amount) AS AmountTotal 
from recharge a 
where *a.rechargedate BETWEEN '2009-07-01' AND '2009-07-31'* 
group by CAST(convert(varchar, a.rechargedate, 112) as datetime) 
order by a.rechargedate 

ci-dessus est ma requête sql. dans le
((((a.rechargedate BETWEEN '2009-07-01' AND '2009-07-31' )))))
je le changerais en utilisant la boucle. donc si la prochaine fois je veux changer de date en août. il boucle automatiquement tout seul. je n'ai pas besoin de saisir manuellement la date au 2009-08-01 ........ quelqu'un peut-il m'aider? montrez-moi comment le faire?Comment faire une boucle SQL pour la date?

Répondre

0

tout dépend de votre logique, voici quelques options:

  1. prendre @StartDate et @EndDate en tant que paramètres pour la sproc
  2. si vous pouvez logiquement lier ces dates à ce jour en cours, vous pouvez calculate them dans le sproc (ou la fonction) basé sur getdate() (vous donnera la date actuelle)
1

Vous ne savez pas si c'est juste une requête que vous utilisez pour vérifier les données, ou si elle est supposée être dans un sproc. Si c'est juste une requête d'utilité, vous pourriez faire quelque chose comme ceci.,

declare @firstofmonth as smalldatetime 
declare @endofmonth as smalldatetime 

--Set the inital month to loop 
set @firstofmonth = '01/01/2009' 
set @endofmonth = '01/31/2009' 

WHILE @firstofmonth >= '09/01/2009' --This would be the condition to end the loop 

Begin 

select CAST(convert(varchar, a.rechargedate, 112) as datetime)as RechargeDate, 
    COUNT(distinct a.mobileno) AS UnitTotal, 
    SUM(a.amount) AS AmountTotal 
From recharge a 
Where a.rechargedate BETWEEN @firstofmonth AND @endofmonth 
group by CAST(convert(varchar, a.rechargedate, 112) as datetime) 
order by a.rechargedate 

SET @firstofmonth = DateAdd(m,1,@firstofmonth) 
SET @endofmonth = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@firstofmonth())+1,0)) 

End 
Questions connexes