Где пункт, изменяющий результаты моего столбца датированных слов, Как я могу обойти это?
Я пытаюсь получить истекшее время, пока st1=5. Вот то, что у меня есть в настоящее время, и дает мне время для каждого изменения состояния. Моя проблема заключается в том, что, когда я добавляю предложение where st1=5, датировка показывает разницу во времени между случаями, когда состояние = 5, а не по истечении времени, когда состояние равно 5.
select timestamp,st1,st2,st3,st4,
datediff(second, timestamp, lead(timestamp)
over (order by timestamp)) as timediff
from A6K_status
Order By Timestamp DESC
+-----+-----+-----+-----+---------------------+----------+
| st1 | st2 | st3 | st4 | TimeStamp | TimeDiff |
+-----+-----+-----+-----+---------------------+----------+
| 3 | 3 | 3 | 3 | 2018-07-23 07:51:06 | |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:50:00 | 66 |
+-----+-----+-----+-----+---------------------+----------+
| 0 | 0 | 10 | 10 | 2018-07-23 07:47:19 | 161 |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:39:07 | 492 |
+-----+-----+-----+-----+---------------------+----------+
| 3 | 3 | 10 | 10 | 2018-07-23 07:37:48 | 79 |
+-----+-----+-----+-----+---------------------+----------+
| 3 | 3 | 10 | 10 | 2018-07-23 07:37:16 | 32 |
+-----+-----+-----+-----+---------------------+----------+
Я пытаюсь суммировать время, когда состояние станции 1 равно 5. Из этой таблицы выше (что у меня есть сейчас), если бы я мог просто суммировать timediff, где st1 = 5, это будет работать идеально. Но добавление "где st1=5" к моему запросу дает мне разницу во времени между случаями, когда состояние = 5.
Любая помощь приветствуется. Я чувствую себя очень близко к результату, которого хотел бы достичь. Спасибо вам.
Редактировать Это то, чего я хотел бы достичь
+-----+------------+----------+
| st1 | TimeStamp | TimeDiff |
+-----+------------+----------+
| 5 | 2018-07-23 | 558 |
+-----+------------+----------+
2 ответа
Вы бы использовали подзапрос (или CTE):
select sum(timediff)
from (select timestamp, st1, st2, st3, st4,
datediff(second, timestamp, lead(timestamp) over (order by timestamp)) as timediff
from A6K_status
) s
where st1 = 5;
Предполагая SQL Server, попробуйте что-то вроде этого:
WITH SourceTable AS (
select TOP 100 PERCENT timestamp,st1,st2,st3,st4,
datediff(second, timestamp, lead(timestamp)
over (order by timestamp)) as timediff
from A6K_status
Order By Timestamp DESC
)
SELECT SUM(timediff) as totaltimediff
WHERE st1 = 5