这是我到目前为止所拥有的。问题是我不希望这些结果出现在单独的结果窗口中。我希望它们在一个结果窗口中作为SUM分组托架日期,但是使用了特定的日期范围。
DECLARE @StartDate DATETIME, @EndDate DATETIME, @DailyBeginDate DATETIME
--SET ME WEEKLY
SELECT @StartDate = '12/7/2015 7:00:00', @EndDate = '1/13/2016 7:00:00'
SET @DailyBeginDate = @StartDate
WHILE @DailyBeginDate < @EndDate
BEGIN
SELECT SUM(TotalCouponBet),@DailyBeginDate from Play (nolock)
WHERE GameServerInsertDT >= @DailyBeginDate
AND GameServerInsertDT < DATEADD(DD, 1, @DailyBeginDate)
SELECT @DailyBeginDate = DATEADD(DD, 1, @DailyBeginDate)
END
答案 0 :(得分:0)
您可以使用递归日期cte来获取日期,然后外部应用Play表格中的总和。
;WITH dateCTE
AS
(
SELECT @StartDate StartDate,
DATEADD(DD,1,@StartDate) EndDate
UNION ALL
SELECT DATEADD(DD,1,StartDate),
DATEADD(DD,1,EndDate)
FROM dateCTE
WHERE DATEADD(DD,1,StartDate) <= @EndDate
)
SELECT cte.StartDate,
tcb.TotalCouponBet
FROM dateCTE cte
OUTER APPLY (SELECT SUM(p.TotalCouponBet) TotalCouponBet
FROM Play p (NOLOCK)
WHERE p.GameServerInsertDT >= cte.StartDate
AND p.GameServerInsertDT < DATEADD(DD,1,cte.EndDate)
) tcb
另一个选择是将CTE连接到Play表
;WITH dateCTE
AS
(
SELECT @StartDate StartDate,
DATEADD(DD,1,@StartDate) EndDate
UNION ALL
SELECT DATEADD(DD,1,StartDate),
DATEADD(DD,1,EndDate)
FROM dateCTE
WHERE DATEADD(DD,1,StartDate) <= @EndDate
)
SELECT cte.StartDate,
SUM(tcb.TotalCouponBet) TotalCouponBet
FROM dateCTE cte
LEFT JOIN Play p (NOLOCK) ON p.GameServerInsertDT >= cte.StartDate
AND p.GameServerInsertDT < DATEADD(DD,1,cte.EndDate)
GROUP BY cte.StartDate
如果@EndDate时间不必与@StartDate时间匹配,您可以使用此cte获取最后一条记录的准确EndDate时间..
;WITH dateCTE
AS
(
SELECT @StartDate StartDate,
(CASE WHEN DATEADD(DD,1,@StartDate) > @EndDate THEN @EndDate ELSE DATEADD(DD,1,@StartDate) END) EndDate
UNION ALL
SELECT DATEADD(DD,1,StartDate),
CASE WHEN DATEADD(DD,1,EndDate) > @EndDate THEN @EndDate ELSE DATEADD(DD,1,EndDate) END
FROM dateCTE
WHERE DATEADD(DD,1,StartDate) <= @EndDate
)