2017-10-13 76 views
0

我练SQL,我想增加一列做在3分钟内累积值累积值:第三列超过3分钟

Time Data Cumulative 
8:00 1 1 
8:01 2 3 
8:02 3 6 
8:03 2 7 
8:04 1 6 
8:04 1 4 

我写了到目前为止,这SQL:

SELECT EX.E3TimeStamp,EX.Data,EX.Data AS Sum 
FROM EX 
ORDER BY EX.E3TimeStamp ASC 

但我很难找到解决方案。我尝试过使用GROUP BY和DATEDIFF,但不成功(错误)。

请如果你能给我一些提示!

+5

什么[标签:RDBMS]您使用的? – Mureinik

+1

。标记您正在使用的DBMS(MySQL,MS SQL Server等)。 –

+0

我正在使用Microsoft使用SQL Server – Julien

回答

0

一种通用方法使用相关子查询。对于处理时间的功能由数据库不同,但思路是:

select t.*, 
     (select sum(t2.data) 
     from t t2 
     where t2.time >= t.time - interval '3 minute' and 
       t2.time <= t.time 
     ) as cumulative 
from t; 

注:本品采用ANSI标准interval语法的时间计算。这可能因数据库而异。

编辑:

的SQL Server版本是:

select t.*, 
     (select sum(t2.data) 
     from t t2 
     where t2.time >= dateadd(minute, -3, t.time) and 
       t2.time <= t.time 
     ) as cumulative 
from t; 
+0

我认为间隔在我的情况下不起作用。另外我有一个关于t2的问题?它是t的副本吗?就我而言,我只需要通过查询创建一个新的'sum'列,我可以在最后3分钟内完成总和。 我正在使用Microsoft SQL Server,我认为它只具有基本功能。 [我的桌面截图] [1] [1]:https://i.stack.imgur.com/udfB4.png – Julien

+0

感谢您帮助翻译查询到SQL Server。我仍然有一个关于t2的问题是查询。它是t的副本吗?它是由服务器从查询中自动创建的?我仍然在机械方面遇到一些困难。 – Julien

+0

't2'是一个表别名。这是对't'的第二个参考。 –