我正在尝试编写一个查询,以提供每次轮班的停机时间总数。我有一个日历表,其中列出了整个年度每个班次的开始和结束时间。
我一直面临的最大困难是,当停机时间分散在多个班次中时,如何计算一个班次的停机时间。另一个问题是如何计算仍在继续的停机时间(最新的开始记录没有停止记录)。
在Postgres数据库中,通过列出创建它的机器ID,创建的时间戳以及它是什么事件(startdowntime或stopdowntime)来记录停机时间。
pue_produnit_id pue_tcreation pue_eventkind
17 2018-12-13 04:45:07 StartDownTime
17 2018-12-14 10:36:35 StopDownTime
18 2018-12-14 10:40:11 StartDownTime
18 2019-01-04 10:46:34 StopDownTime
在班次日历表中,它通过列出班次类型的ID(1、2、3),班次开始和班次结束来记录。
cae_entrytype_id cae_from cae_to
1 2019-01-01 06:30:00 2019-01-01 14:30:00
2 2019-01-01 14:30:00 2019-01-01 22:30:00
3 2019-01-01 22:30:00 2019-01-02 06:30:00
我已经能够编写查询以使用线索找到停机停机时间,并使用两者之间的比较将停机时间时间戳与轮班日历进行比较,以向我展示此查询:
Date Shift_number Machine ActivityDate startdttime stopdttime Duration_Minutes
2019-02-05 1 17 2019-02-05 2019-02-05 14:19:39 2019-02-05 14:23:46 4
虽然我不一定拥有我所拥有的。班次编号是从启动停机时间开始计算的,在停机停机时间处于另一班次时不会将其拆分。我希望能够从轮班日历表中看到一条记录,该记录表明停机了多少分钟。这将需要在每台机器上完成。例如:
Machine Shift Date downtime_minutes
17 1 1/2/2019 26
18 1 1/2/2019 32
17 2 1/2/2019 0
18 2 1/2/2019 100
如果要找出仍在发生的停机时间(没有最新的停机时间记录),那么现在就可以了。另外,根据结果,我也许可以使用Lead函数进行处理,并将current_timestamp添加为其默认值