Sql 如何得到两行之间的差异
谢谢你的帮助 我在PostgreSQL中有下表 这些列是Sql 如何得到两行之间的差异,sql,postgresql,function,select,time,Sql,Postgresql,Function,Select,Time,谢谢你的帮助 我在PostgreSQL中有下表 这些列是 ON = END - START IDLE = START (LINE 2) - END (LINE 1) 我需要计算“空闲”使用选择。。。通过从第1行的末尾减去第2行的起点来获得怠速值,如下示例,怠速值00:25为09:25-09:00 我无法为此创建逻辑,也无法创建用于计算它的代码 这是我的选择 select st.id, st.tvd_unidade, st.tvd_pdv,
ON = END - START
IDLE = START (LINE 2) - END (LINE 1)
我需要计算“空闲”使用选择。。。通过从第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
在你担心数学之前,你需要能够在一行上看到你需要的所有数据。要查看其他行中的数据,请使用窗口功能。在这种情况下,您可以使用lag窗口功能查看前一行—类似这样的内容
Select start, end, lag(end) over (order by [your sort key]) as lastEnd
from table
order by [your sort key]
应该给你你需要的数据。一旦确定获得了正确的数据,就可以开始对on和idle进行数学计算了到目前为止您尝试了什么?我尝试过使用:Rownum,但我的表操作了超过100.000个值,尝试在查询结束时使用“with”select但不使用workUse
Limit 10
,因此每次只处理几行。这将使测试和游戏变得更快。或者,将一些示例数据复制到一个新表中,以便在中处理您的查询。与其说您尝试了什么,不如在问题中发布查询以及实际结果,而不仅仅是说它不起作用。“不工作”可能意味着从语法错误到查询挂起、无结果到错误结果。使用行号和CTE(带查询)听起来像是正确的方法,作为答案给出的滞后解决方案也是正确的。我的表有超过100.000行,一行一行显示开始和结束时间。。。明天我测试滞后并返回这里。我不理解函数滞后作为帮助我。。。我将查询更改为使用LAG,但结果相同,没有“LAG”LAG用于查看前一行的值。如果您在第10行,Lag(end,1)表示从第(10-1)行中选择end列的值。我只在上面使用了lag(end),因为其中一个是默认值。但是,您需要给它一个排序顺序(这是“结束(排序依据?”)部分)。对于您的使用,排序顺序需要与主查询的顺序相同。有关更多信息和教程,请搜索postgres lag函数。