You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中从SCADA分钟级数据表提取整点小时数据需求

提取PostgreSQL中整点时刻的SCADA日志数据

嘿,这个需求我太熟悉了!既然你的SCADA日志表每分钟都在自动更新,要抓整点(比如06:00:00、07:00:00这类)的tag和value数据,还不能写死固定时间,用PostgreSQL自带的日期函数就能完美解决,给你两种实用的方案:

方案一:直接筛选分钟和秒为0的记录

这种方式最直观,直接提取timestamp字段里的分钟和秒部分,判断是否都为0,就能精准定位整点时刻的记录:

SELECT timestamp, tag, value
FROM your_scada_table -- 记得替换成你的实际表名
WHERE EXTRACT(MINUTE FROM timestamp) = 0 
  AND EXTRACT(SECOND FROM timestamp) = 0;

为啥好用? 它直接针对时间的分钟和秒维度做判断,不管日期是哪天,只要是整点就会被捞出来,完全不用硬编码时间范围。

方案二:用date_trunc做时间截断匹配

PostgreSQL的date_trunc函数可以把时间戳截断到指定的精度(比如小时),我们只需要判断原时间戳是否等于截断后的整点时间就行,代码更简洁:

SELECT timestamp, tag, value
FROM your_scada_table -- 替换成你的表名
WHERE timestamp = date_trunc('hour', timestamp);

原理:date_trunc('hour', timestamp)会把任意时间戳转换成对应小时的整点时刻(比如2024-05-20 06:12:34会变成2024-05-20 06:00:00),如果原时间戳本身就是整点,那两者就会相等,自然被筛选出来。

特殊情况处理:如果存在毫秒级偏差

要是你的SCADA系统偶尔会出现整点时刻的记录带毫秒(比如06:00:00.001),上面的精确匹配可能会漏数据,这时候可以调整条件,匹配整点后1分钟内的所有记录:

SELECT timestamp, tag, value
FROM your_scada_table
WHERE timestamp >= date_trunc('hour', timestamp)
  AND timestamp < date_trunc('hour', timestamp) + INTERVAL '1 minute';

这个条件会把每个小时的第0分钟内的所有记录都捞出来,确保不会因为毫秒差错过数据。

记得把代码里的your_scada_table替换成你实际的表名哦!

内容的提问来源于stack exchange,提问作者Smit Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:42:58