我有一个表,其中记录在不同时段插入(每个记录包含一个名为'Amount'的列)。作为基于时间段的累计求和的列
我想在每5秒后显示总数量。我曾与下面的查询尝试没有成功:
SELECT Sum(totalamount) AS RealTimeTotalAmount,
Datepart(second, createstamp)/5 AS dp
FROM [order]
WHERE
createstamp BETWEEN Dateadd(s, -5, Getdate()) AND Getdate()
GROUP BY Datepart(second, createstamp)/5
我现在面临的问题是,它让我看到了“累计金额按每一秒”,我想看看它像“(累计金额为每每一秒+总金额累计到那第二)”
这里是源数据的样子:
-----------------------------------------------------------
|OrderID | CreateStamp | TotalAmount |
-----------------------------------------------------------
|1 |2015-03-22 15:26:05.620 | 10 |
-----------------------------------------------------------
|2 |2015-03-22 15:26:05.653 | 20 |
-----------------------------------------------------------
|3 |2015-03-22 15:26:05.660 | 10 |
-----------------------------------------------------------
|4 |2015-03-22 15:26:06.663 | 10 |
-----------------------------------------------------------
|5 |2015-03-22 15:26:06.670 | 30 |
-----------------------------------------------------------
从本质上讲,我希望得到的查询返回如下:
----------------------------------------
|Period | Accumulative Amount |
----------------------------------------
|0 to 5 seconds | 30 |
----------------------------------------
|0 to 10 seconds | 80 |
----------------------------------------
这基本上是一个从0时间到5的倍数的累计。对于最近5秒,基本上我计算了整天的时间,直到我执行这个查询的时间,例如前一天的金额这次是50,所以结果表应该看起来像
----------------------------------------
|0 to 5 seconds | 30 + 50 = 80 |
----------------------------------------
|0 to 10 seconds | 80 + 80 = 160 |
----------------------------------------
什么版本的SQL Server您使用的是? SQL Server 2012中的窗口函数有显着的改进。 –
我使用的SQL Server 2008 – rashfmnb