Cette question m'a vraiment déconcerté, parce que je ne pouvais pas vraiment trouver une solution simple pour cela. Zut.
Le mieux que j'ai pu gérer était une bastardisation absolue de ce qui suit: créer une table temporaire, y insérer les "périodes", revenir à la table d'origine et la grouper.
Supposons que votre table de contenu les éléments suivants sont
ID int
Date DateTime
Counter int
Et vous essayez de résumer tous les counter
« s en six périodes de mois
DECLARE @min_date datetime
select @min_date = min(date) from test
DECLARE @max_date datetime
select @max_date = max(date) from test
DECLARE @today_a datetime
DECLARE @today_b datetime
set @today_a = getdate()
set @today_b = getdate()
CREATE TABLE #temp (startdate DateTime, enddate DateTime)
WHILE @today_a > @min_date
BEGIN
INSERT INTO #temp (startDate, endDate) VALUES (dateadd(month, -6, @today_a), @today_a)
SET @today_a = dateadd(month, -6, @today_a)
END
WHILE @today_b < @max_date
BEGIN
INSERT INTO #temp (startDate, endDate) VALUES (@today_b, dateadd(month, 6, @today_b))
SET @today_b = dateadd(month, 6, @today_b)
END
SELECT * FROM #temp
SELECT
sum(counter),
'Between ' + Convert(nvarchar(10), startdate, 121) + ' => ' + Convert(nvarchar(10), enddate, 121) as Period
FROM test t
JOIN #Temp ht
ON t.Date between ht.startDate AND ht.EndDate
GROUP BY
'Between ' + Convert(nvarchar(10), startdate, 121) + ' => ' + Convert(nvarchar(10), enddate, 121)
DROP TABLE #temp
J'espère vraiment que quelqu'un peut trouver une meilleure solution mon cerveau a évidemment fondu.
Je pense que le point est qu'il ne veut pas l'exécuter à partir specifc Jan- > Périodes de juin et juillet-décembre, mais les périodes de 6 mois sont calculées à la volée à partir de la date actuelle. ainsi, à compter de la date d'aujourd'hui, la période précédente et suivante serait 2008-11-27 => 2009-05-27 ET 2009-05-27 => 2009-11-27 –