この質問は私を本当に困惑させました。なぜなら、私はそれに対する簡単な解決策を実際に思いつくことができなかったからです。くそ。
私が管理できる最善の方法は、一時テーブルを作成し、それに「期間」を挿入し、元のテーブルに結合して、それをグループ化する、次の絶対的なろくでなし化でした。
コンテンツ テーブルに次のものが含まれているとします。
ID int
Date DateTime
Counter int
counter
そして、すべての を 6 か月で合計しようとしています。
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
誰かが私の脳が明らかに溶けたより良い解決策を思い付くことを本当に願っています.