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
答案 0 :(得分:1)
我不知道有一种更优雅的方式来做到这一点,除了你的跑步总数的子查询。你所拥有的T-SQL标准非常优雅。
但是,根据您必须处理的记录数量以及索引的外观,这可能会非常缓慢。您不会说出此信息的目的地是什么,但如果它是任何类型的报告或网页,我会考虑将运行总计作为目的地处理的一部分,而不是在数据库中。