Calculating time difference between two following records

Hi, I have a problem.
I’d like to calculate time duration between first and last value of selected period.
In the selected period I want to calculate time difference between actual record and previous record and summarize it.
When I calculate time difference between two datetime I get strange values:
This is the query:
SELECT
$__timeGroupAlias(time,$__interval),
temp_act,
temp_act - lag(temp_act) over (order by time) as “temp_change”,
time - lag(time) over (order by time) as “time_dif”,
max(time) - min(time) as “duration”
FROM e_kiln_dp5
WHERE $__timeFilter(time)
GROUP BY 1
ORDER BY $__timeGroup(time,$__interval)

The result:

Time temp_act temp_change time_dif duration
2023.09.19 17:10 40 0
2023.09.19 17:15 40 0 100 400
2023.09.19 17:20 40 0 500 400
2023.09.19 17:25 40 0 500 400
2023.09.19 17:30 56 16 500 400
2023.09.19 17:35 40 -16 500 400
2023.09.19 17:40 48 8 500 400
2023.09.19 17:45 56 8 500 400
2023.09.19 17:50 64 8 500 400
2023.09.19 17:55 65 1 500 400
2023.09.19 18:00 65 0 4500 400
2023.09.19 18:05 73 8 500 400

It can be seen that temp_change is calculated well but I do not undertand time_dif calculating.

  • the time difference between two timestamp is 5 min, which is 300 sec. Why 500 sec is calculated?
  • what does 4500 sec mean and how is it calculated?
  • what does duration mean and how is it calculated? What does max-min mean in this case?

What is your datasource?

MySQL

Can you see what this query gives you? Just trying to get 300 to appear in your “time_dif” column. The TIMESTAMPDIFF() function is used to calculate the difference in seconds between two timestamps.

SELECT
  $__timeGroupAlias(time,$__interval),
  temp_act,
  TIMESTAMPDIFF(SECOND, LAG(time) OVER (ORDER BY time), time) AS "time_dif",
  temp_act - LAG(temp_act) OVER (ORDER BY time) AS "temp_change"
FROM
  (
    SELECT
      $__timeGroupAlias(time,$__interval),
      temp_act
    FROM
      e_kiln_dp5
  ) AS t
GROUP BY 1
ORDER BY
  $__timeGroup(time,$__interval);

I may have some syntax issues in the above, so if you get an error, please try to debug before posting back.

Thank you for your help.
Now it works well, the result is 300.
Only the first data (at the second record) is 60 instead of 300 and I don’t know why.

Question: why do you proposed this new FROM clausule?
I used this simple one:
FROM
e_kiln_dp5
where $__timeFilter(time)

That is to create a temporary table called t that contains the original data. It then uses the LAG() function to calculate the difference in time and temp_act between each sequential record. The TIMESTAMPDIFF() function is used to calculate the difference in seconds between two timestamps. The temp_act_diff column is calculated by subtracting the previous record’s temp_act from the current record’s temp_act.