如何获得两行之间的差异

时间:2019-05-30 00:31:48

标签: sql postgresql function select time

感谢帮助 我在PostgreSQL中有下表

PostgresTable

这些列是

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

我需要使用select计算“ idle” ...空闲值是通过从第1行的结尾减去第2行的开始获得的,在该示例中,空闲值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 个答案:

答案 0 :(得分:2)

在担心数学问题之前,您需要能够查看一行中需要的所有数据。要查看其他行中的数据,请使用窗口功能。在这种情况下,您可以使用滞后窗口功能查看上一行-像这样

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

应为您提供所需的数据。一旦确定有正确的数据,就可以开始进行空闲和空闲状态的数学计算