根据轮班时间计算总停机时间

时间:2019-02-06 15:24:24

标签: sql postgresql downtime

我正在尝试编写一个查询,以提供每次轮班的停机时间总数。我有一个日历表,其中列出了整个年度每个班次的开始和结束时间。

我一直面临的最大困难是,当停机时间分散在多个班次中时,如何计算一个班次的停机时间。另一个问题是如何计算仍在继续的停机时间(最新的开始记录没有停止记录)。

在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添加为其默认值

0 个答案:

没有答案