我正在尝试编写一个查询来给我每个班次的停机时间总数。我有一个日历表,列出了全年每个班次的开始和结束时间。
我面临的最大困难是当停机时间分布在多个班次中时,如何计算一个班次的停机时间。另一个问题是如何计算仍在进行中的停机时间(最近开始记录没有停止记录)。
在 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
我已经能够编写一个查询来向我展示这一点,使用线索来查找停止停机时间,并使用 between 将停机时间时间戳与班次日历进行比较:
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
我所拥有的不一定是我需要的。班次编号是从 startdowntime 发生时获取的,当 stopdowntime 处于另一个班次时,它不会将其拆分。我希望能够从一个记录的班次日历表中看到有多少分钟的停机时间。这将需要为每台机器完成。例如:
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
如果找出仍在发生的停机时间(没有最新的停机时间记录),那么现在就可以了。此外,根据结果,我可以使用前导函数解决它并将 current_timestamp 添加到其默认值