Totaliser la colonne comme une accumulation basée sur une période de time

J'ai une table dans laquelle les loggings sont insérés à différentes périodes (chaque logging contient une colonne appelée 'Amount').

Je veux montrer l'accumulation totale, après chaque 5 secondes. J'ai essayé avec la requête suivante sans succès:

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 

Le problème que je suis confronté est, qu'il me montre la «sum accumulative par seconde» et je veux le voir comme «(sum cumulative par seconde + montant cumulatif total jusqu'à cette seconde)»

Voici comment datatables sources ressemblent:

 ----------------------------------------------------------- |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 | ----------------------------------------------------------- 

Essentiellement, je veux que la requête résultante returnne comme suit:

 ---------------------------------------- |Period | Accumulative Amount | ---------------------------------------- |0 to 5 seconds | 30 | ---------------------------------------- |0 to 10 seconds | 80 | ---------------------------------------- 

C'est essentiellement une accumulation de 0 fois à des multiples de 5.pour les 5 dernières secondes, je calcule le montant pour toute la journée jusqu'au moment où j'exécute cette requête et par exemple le montant pour toute la journée avant cette heure 50 table de résultat devrait ressembler à

 ---------------------------------------- |0 to 5 seconds | 30 + 50 = 80 | ---------------------------------------- |0 to 10 seconds | 80 + 80 = 160 | ---------------------------------------- 

vous pouvez essayer quelque chose comme ça.

Des données d'input

 DECLARE @Orders TABLE ( OrderId INT, CreateStamp DATETIME, TotalAmount NUMERIC(9,2) ) INSERT INTO @Orders SELECT 1,'2015-03-22 15:26:05.620',400 UNION ALL SELECT 2,'2015-03-22 15:26:04.653',500 UNION ALL SELECT 3,'2015-03-22 15:26:05.660',600 UNION ALL SELECT 4,'2015-03-22 15:26:06.663',700 UNION ALL SELECT 5,'2015-03-22 15:26:06.670',900 UNION ALL SELECT 6,'2015-03-22 15:26:05.660',600 UNION ALL SELECT 7,'2015-03-22 15:26:09.663',700 UNION ALL SELECT 8,'2015-03-22 15:26:12.670',900 

Question

 ;WITH CTE as ( SELECT DATEDIFF(minute,0,CreateStamp)totalminutes,Datepart(second, CreateStamp ) / 5 sec,SUM(TotalAmount) TotalAmount FROM @Orders GROUP BY DATEDIFF(minute,0,CreateStamp),Datepart(second, CreateStamp) / 5 ) SELECT DATEADD(minute,totalminutes,0) dt,sec,(SELECT SUM(TotalAmount) FROM cte WHERE totalminutes <=c2.totalminutes and sec <=c2.sec) FROM CTE c2 ORDER BY sec; 

J'ai ajouté un GROUP BY DATEDIFF(minute,0,CreateStamp) pour séparer les secondes pour différentes dates et minutes.

Si je vous comprends bien:

 DECLARE @t TABLE ( ID INT , D DATETIME , A MONEY ) DECLARE @mind DATETIME , @maxd DATETIME INSERT INTO @t VALUES ( 1, '2015-04-07 13:49:15.000', 5 ), ( 2, '2015-04-07 13:49:17.000', 15 ), ( 3, '2015-04-07 13:49:35.000', 2 ), ( 4, '2015-04-07 13:49:45.000', 4 ), ( 5, '2015-04-07 13:49:49.000', 20 ), ( 6, '2015-04-07 13:50:05.000', 20 ), ( 7, '2015-04-07 13:50:09.000', 3 ), ( 8, '2015-04-07 13:50:09.000', 3 ), ( 9, '2015-04-07 13:50:10.000', 1 ), ( 10, '2015-04-07 13:50:15.000', 1 ) SELECT @mind = MIN(d) , @maxd = MAX(d) FROM @t; WITH cte AS ( SELECT @mind AS d UNION ALL SELECT DATEADD(ss, 5, d) FROM cte WHERE cte.d <= @maxd ) SELECT cte.d, SUM(A) AS A FROM cte JOIN @tt ON tD < cte.d GROUP BY cte.d 

Sortie:

 d A 2015-04-07 13:49:20.000 20.00 2015-04-07 13:49:25.000 20.00 2015-04-07 13:49:30.000 20.00 2015-04-07 13:49:35.000 20.00 2015-04-07 13:49:40.000 22.00 2015-04-07 13:49:45.000 22.00 2015-04-07 13:49:50.000 46.00 2015-04-07 13:49:55.000 46.00 2015-04-07 13:50:00.000 46.00 2015-04-07 13:50:05.000 46.00 2015-04-07 13:50:10.000 72.00 2015-04-07 13:50:15.000 73.00 2015-04-07 13:50:20.000 74.00