I am struggling in finding a solution to create a cumulative sum by group in SQL.
I have a table which have different events. What I want to accomplish is to sum the duration time of an event.
CREATE TABLE Events( EventID int, EventName varchar(20), EventTime numeric(17,6) ); INSERT INTO Events VALUES (1, 'Event1_Start', 0.2); INSERT INTO Events VALUES (2, 'Event2_Start', 0.3); INSERT INTO Events VALUES (3, 'Event3_End', 0.2); INSERT INTO Events VALUES (4, 'Event2_End', 0.6); INSERT INTO Events VALUES (5, 'Event4_Start', 0); INSERT INTO Events VALUES (2, 'Event2_Start', 0.3); INSERT INTO Events VALUES (6, 'Event1_End', 0);
What I need is a cumulative sum that gives me the total duration of Event1 as column besides ‘Event1_Start’ row. I would like to sum all the intermediates events before my event_start and event_end.
EventID | EventName | EventTime | CumSumEvent1 |
---|---|---|---|
1 | Event1_Start | 0.2 | 1.6 |
2 | Event2_Start | 0.3 | 0 |
3 | Event3_End | 0.2 | 0 |
4 | Event2_End | 0.6 | 0 |
5 | Event4_Start | 0 | 0 |
2 | Event2_Start | 0.3 | 0 |
6 | Event1_End | 0 | 0 |
I try to use sum over partition but no luck and CTE.
Thanks in advance for your suggestions. Best regards.
Advertisement
Answer
you can group by part of the string:
select substr(eventname, 1, 6), sum(eventtime) from Events group by substr(eventname, 1,6)
db<>fiddle here