sql - 关于查找包含在某个纪元时间范围内的记录的 SQL 查询的建议
问题描述
为那些需要较少抽象的人编辑了一个“CREATE TABLE”脚本(见问题底部)
运行一个水管理报警系统,其中硬件运行一个包含开始/停止时间的预定计时器“程序”,每个程序可以运行一个或多个“站”(阀门或洒水器或其他任何东西),它们按照自己的开始/停止时间运行由“程序”控制。请参阅下面的块以获取粗略示例,然后进行解释。
|<---- Program 1 ----------------------------------------------->|
|<-- Station 1 -->| |<---- Station 2 ---->|<---- Station 3 --->|
|<---- Program 2 ---------------------------------------->|
|<---- Station 4 ---->|<---- Station 5 -->|
|<---- Program 3 --->|
|<---- Station 6 -->|
|<-- Master Pump Fail Alarm -->|
在上面的“伪时间表”中,程序 1 有 3 个站点正在运行,程序 2 有 2 个站点正在运行。节目 3 有一个车站。主泵恰好在程序 2 中的第 5 站启动时发生故障,但警报在程序 2 结束后结束(可能已修复?)但仍在程序 1 的运行时间内。箭头指示事件运行时间的开始和停止时间以及范围.
基本上,我试图找出一个 WHERE 子句算法,如下所示:
SELECT stuff WHERE "a program's or station's running time occurred *during* the alarm period (alarm.begintime to alarm.endtime in the schema below)".
使用上述示例时间表的结果应返回一个记录列表,其中包括带有站点 2 和 3 的程序 1,以及仅带有站点 5 的程序 2。
程序、站点和警报的开始和结束时间记录在 EPOCH/UNIXTIME 的数据库中。数据库引擎是 x86_64-pc-linux-gnu 上的 PostgreSQL 9.6.5。
如果有什么需要进一步澄清,请询问。提前感谢您提供帮助解决问题的任何花絮。
下面的模式应该创建与上面的可视化块类似的布局:
CREATE TABLE test(
oid PRIMARY KEY,
itemid INTEGER,
itemtype VARCHAR (255),
begintime INTEGER,
endtime INTEGER
);
INSERT INTO test VALUES (1, 1, 'Program', 1556809522, 1556809680);
INSERT INTO test VALUES (2, 1, 'Station', 1556809522, 1556809560);
INSERT INTO test VALUES (3, 2, 'Station', 1556809620, 1556809642);
INSERT INTO test VALUES (4, 3, 'Station', 1556809642, 1556809680);
INSERT INTO test VALUES (5, 2, 'Program', 1556809522, 1556809670);
INSERT INTO test VALUES (6, 4, 'Station', 1556809541, 1556809630);
INSERT INTO test VALUES (7, 5, 'Station', 1556809630, 1556809660);
INSERT INTO test VALUES (8, 3, 'Program', 1556809522, 1556809618);
INSERT INTO test VALUES (9, 6, 'Station', 1556809522, 1556809617);
INSERT INTO test VALUES (10, 1, 'Alarm', 1556809630, 1556809675);
解决方案
推荐阅读
- delphi - 我可以将缓冲区 + 大小转换为 TBytes 吗?
- python - 训练/测试拆分在每个拆分中保留类比例
- spring - 如何使用带有嵌套状态机的弹簧状态机
- autodesk-forge - 集成 ant design 后查看器元素损坏
- amazon-web-services - 空 S3 存储桶 | 接入点 ARN 区域为空
- rabbitmq - rabbitmq 收到与任何主题不匹配的消息
- visual-studio - 在 Visual Studio 2019 的 lambda 表达式中使用 x
- c - MuPDF - 使给定的类似函数从文本中生成句子数组(C 语言)
- jdbc - Oracle 错误 - 失败:java.library.path 中没有 ocijdbc19
- android - android inputType="number" 和 "numberPassword" 不同的键盘,如何制作相同的键盘?