0

我正在尝试编写一个查询来给我每个班次的停机时间总数。我有一个日历表,列出了全年每个班次的开始和结束时间。

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

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

4

0 回答 0