10.3 Calculate the number of seconds/minutes between two datetime values

 

Calculate the number of seconds/minutes between two specified datetime values.
Based on the following table, calculate the cumulative time beginning from when value 1 under Value field appears the first time until value 0 appears; if 0 does not appear at all, compare the current value with the system time. Below is part of the original data:

ID Time Value
1 2020/07/08 15:00:00 1
1 2020/07/08 15:02:00 1
1 2020/07/08 15:04:00 1
1 2020/07/08 15:06:00 0
1 2020/07/08 15:08:00 0
1 2020/07/08 15:10:00 1
1 2020/07/08 15:20:00 0
2 2020/07/08 15:02:00 1

SPL offers now()function to get the current system datetime, and interval (datetimeExp1,datetimeExp2) function to calculate the interval between two datetime values, where @s option enables returning the number of seconds between them.

SPL script:

A
1 =T(“table.txt”)
2 =A1.group(ID).(~.group@o1(Value)|[null])
3 =A2.news(~.len()\2;ID,(s=A2.~(#*2-1).Time):StartTime, interval@s(s,ifn(A2.~(#*2).Time,now()))/60:CumTime)

A1 Read the data file.
A2 Group records by ID and then group records in each group according to whether the next Value value is the same; get the first record from each subgroup. And insert a null record into each group for the convenience of later computation.
A3 In each group, take the Time in each odd number row as the start time and that in the next even number row as the end time, and calculate their interval. If the Time in the even number row is null, use the current system time as the end time to calculate the interval.

Execution result:

ID StartTime CumTime
1 2020/07/08 15:00:00 6.0
1 2020/07/08 15:10:00 10.0
2 2020/07/08 15:02:00 28.0