这个问题真的让我很困惑,因为我实际上无法想出一个简单的解决方案。该死。
我能做到的最好的就是对以下内容进行绝对的混蛋,您可以在其中创建一个临时表,将“期间”插入其中,重新加入您的原始表,然后将其分组。
假设您的内容表具有以下内容
ID int
Date DateTime
Counter int
你试图counter
在六个月的时间内总结所有的
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
我真的希望有人能想出一个更好的解决方案,我的大脑显然已经融化了。