Как получить разницу между двумя строками - PullRequest
0 голосов
/ 30 мая 2019

спасибо за помощь. У меня есть следующая таблица в PostgreSQL

PostgresTable

Столбцы

ON = END - START
IDLE = START (LINE 2) - END (LINE 1)

Мне нужно вычислить "холостой ход" с помощью выбора ..Значение простоя получается с использованием начала строки 2, вычтенного из конца строки 1, следуя примеру, значение простоя 00:25 равно 09:25 - 09: 00.

Я не могучтобы создать логику для этого или код для его вычисления.

Вот мой выбор

    select st.id,
       st.tvd_unidade,
       st.tvd_pdv, 
       st.tvd_cupom,
       st.tvd_operador,
       min(st.tvd_data_hora) as start_at,
       max(en.tvd_data_hora) as end_at,
       max(en.tvd_data_hora) - min(st.tvd_data_hora) as produtivo
  from ger st 
 inner join ger en on st.tvd_unidade = en.tvd_unidade and st.tvd_pdv = en.tvd_pdv and st.tvd_cupom = en.tvd_cupom 
 where en.tvd_tipo_reg in ('FINN','FINn')
  and st.tvd_tipo_reg in ('INFN','INFn')
 group by 1

1 Ответ

2 голосов
/ 30 мая 2019

Прежде чем беспокоиться о математике, вы должны иметь возможность увидеть все необходимые данные в одной строке. Чтобы увидеть данные из других строк, вы используете функции управления окнами. В этом случае вы можете использовать оконную функцию запаздывания для просмотра предыдущей строки - что-то вроде этого

Select start, end, lag(end) over (order by [your sort key]) as lastEnd
from table
order by [your sort key]

должен предоставить вам необходимые данные. Как только вы убедитесь, что получили правильные данные, вы можете приступить к математическим вычислениям для вкл. И бездейств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...