感谢帮助 我在PostgreSQL中有下表
这些列是
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
答案 0 :(得分:2)
在担心数学问题之前,您需要能够查看一行中需要的所有数据。要查看其他行中的数据,请使用窗口功能。在这种情况下,您可以使用滞后窗口功能查看上一行-像这样
Select start, end, lag(end) over (order by [your sort key]) as lastEnd
from table
order by [your sort key]
应为您提供所需的数据。一旦确定有正确的数据,就可以开始进行空闲和空闲状态的数学计算