sql - 根据轮班时间计算总停机时间
问题描述
我正在尝试编写一个查询来给我每个班次的停机时间总数。我有一个日历表,列出了全年每个班次的开始和结束时间。
我面临的最大困难是当停机时间分布在多个班次中时,如何计算一个班次的停机时间。另一个问题是如何计算仍在进行中的停机时间(最近开始记录没有停止记录)。
在 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 添加到其默认值
解决方案
推荐阅读
- cakephp - 插件 cakephp 3.7
- javascript - JavaScript:在 If 语句后将控制台日志值推入函数的输入参数--> 引用错误
- c# - 接口成员的默认访问修饰符
- javascript - 无法使用 css 居中 javascript 创建的按钮
- arrays - 将函数映射到haskell中的列表/数组?
- jquery - jQuery隐藏和显示在一行
- c++ - 向量迭代器在 push_back() 期间不可取消引用错误
- python - 我正在尝试编写一个执行图像操作的类对象
- java - 循环中的 imageView.animate() 不起作用
- powershell - -Exclude 和 -Filter 可以一起使用吗?