J'essaie d'obtenir une somme cumulative d'enregistrements dans une période de temps d'une journée. Voici un échantillon actuel de mes données.

DT                      No_of_records
2017-05-01 00:00:00.000     241
2017-05-01 04:00:00.000     601
2017-05-01 08:00:00.000     207
2017-05-01 12:00:00.000     468
2017-05-01 16:00:00.000     110
2017-05-01 20:00:00.000     450
2017-05-02 00:00:00.000     151
2017-05-02 04:00:00.000     621
2017-05-02 08:00:00.000     179
2017-05-02 12:00:00.000     163
2017-05-02 16:00:00.000     579
2017-05-02 20:00:00.000     299

J'essaie de résumer le nombre d'enregistrements jusqu'à ce que le jour change dans une autre colonne. Ma sortie souhaitée est ci-dessous.

DT                      No_of_records    cumulative
2017-05-01 00:00:00.000     241             241
2017-05-01 04:00:00.000     601             842
2017-05-01 08:00:00.000     207             1049
2017-05-01 12:00:00.000     468             1517 
2017-05-01 16:00:00.000     110             1627
2017-05-01 20:00:00.000     450             2077
2017-05-02 00:00:00.000     151             151
2017-05-02 04:00:00.000     621             772
2017-05-02 08:00:00.000     179             951
2017-05-02 12:00:00.000     163             1114
2017-05-02 16:00:00.000     579             1693
2017-05-02 20:00:00.000     299             1992

L'un de vous a-t-il des idées sur la façon d'obtenir la colonne cumulative?

3
Jamie 3 août 2017 à 17:37

2 réponses

Meilleure réponse

Si 2012+, vous pouvez utiliser avec la fonction de fenêtre sum() over

Select *
       ,cumulative = sum(No_of_records) over (Partition by cast(DT as date) Order by DT)
 From  YourTable
4
John Cappelletti 3 août 2017 à 14:39

Vous pouvez le faire avec un SUM() fenêtré:

Select  DT, No_of_records, 
        Sum(No_of_records) Over (Partition By Convert(Date, DT) Order By DT) As cumulative
From    YourTable
2
Siyual 3 août 2017 à 14:40