The column “activitie_time_enter” has the times.
The column “activitie_still” indicates the type of activity.
The column “activitie_walking” indicates the other type of activity.
Table example:
x
activitie_time_enter | activitie_still | activitie_walking
17:30:20 | Still |
17:31:32 | Still |
17:32:24 | | Walking
17:33:37 | | Walking
17:34:20 | Still |
17:35:37 | Still |
17:45:13 | Still |
17:50:23 | Still |
17:51:32 | | Walking
What I need is to sum up the total minutes for each activity separately. Any suggestions or solution?
Advertisement
Answer
First calculate the duration for each activity (the with
CTE) and then do conditional sum.
with t as
(
select
*, lead(activitie_time_enter) over (order by activitie_time_enter) - activitie_time_enter as duration
from _table
)
select
sum (duration) filter (where activitie_still = 'Still') as total_still,
sum (duration) filter (where activitie_walking = 'Walking') as total_walking
from t;
/** Result:
total_still|total_walking|
-----------+-------------+
00:19:16| 00:01:56|
*/
BTW do you really need two columns (activitie_still
and activitie_walking
)? Only one activity
column with those values will do. This will allow more activities (Running, Sleeping, Working etc.) w/o having to change the table structure.