У меня есть таблица для мониторинга некоторого оборудования с указанием даты и времени и состояния. Я хотел бы рассчитать «бегущие дни» между статусами «RUN» и «STOP». Пробую следующий запрос:
select run.stamp -
(
-- select the first STOP status after the current RUN status
select stamp
from well_monitoring
where stamp > run.stamp and status = 'STOP'
order by stamp limit 1
)
from well_monitoring run
where
run.status = 'RUN'
and ( -- we want only the first RUN
select status
from well_monitoring
where stamp < run.stamp
order by stamp desc limit 1) <> 'RUN'
order by run.stamp
См. SQLFiddle для создания таблицы/данных и проверки запроса.
Когда я пытаюсь СУММИТЬ, чтобы получить общее количество рабочих дней:
select SUM( run.stamp - ... ) ...
У меня есть следующая ошибка:
ОШИБКА: столбец "run.stamp" должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции. Позиция: 448.
Итак: - как я могу обновить свой запрос, чтобы получить сумму? - запрос имеет 2 подзапроса, есть ли лучший способ (cte?) сделать это?
(версия Postgres: 9.1.7)