SQL Server 2008中的累积添加

时间:2014-09-15 10:38:08

标签: database sql-server-2008

tblData中的示例数据:

RowID   SID  Staken   DateTaken
---------------------------------------------
1       1    1        2014-09-15 14:18:11.997
2       1    1        2014-09-16 14:18:11.997
3       1    1        2014-09-17 14:18:11.997

我想获得SID的日常计数以及像

这样的累积总和
Date       ThisDayCount  TotalCount
-----------------------------------
2014-09-15     1             1
2014-09-16     10            11
2014-09-17     30            41

这就是我现在在存储过程中使用start&结束日期参数。有更优雅的方式吗?

;WITH TBL AS 
(
    SELECT 
       CONVERT(date, asu.DateTaken) AS Date, 
       COUNT(*) AS 'ThisDayCount'
    FROM 
       tblData asu 
    WHERE 
       asu.SID = 1 
       AND asu.STaken = 1 
       AND asu.DateTaken >= @StartDate 
       AND asu.DateTaken <= @EndDate
    GROUP BY 
       CONVERT(date, asu.DateTaken)
 )
 SELECT 
     t1.Date, t1.ThisDayCount, SUM(t1.ThisDayCount) AS 'TotalCount'
 FROM 
     TBL t1
 INNER JOIN 
     TBL t2 ON t1.date >= t2.date
 GROUP BY
     t1.Date, t1.ThisDayCount

1 个答案:

答案 0 :(得分:1)

我不知道有一种更优雅的方式来做到这一点,除了你的跑步总数的子查询。你所拥有的T-SQL标准非常优雅。

但是,根据您必须处理的记录数量以及索引的外观,这可能会非常缓慢。您不会说出此信息的目的地是什么,但如果它是任何类型的报告或网页,我会考虑将运行总计作为目的地处理的一部分,而不是在数据库中。