【问题标题】:Finding data patterns in SQL在 SQL 中查找数据模式
【发布时间】:2015-06-10 18:32:29
【问题描述】:

我目前有一台工业气体发生器,它的数据记录到 Postgres 服务器。发生器中的一个容器额定压力循环高达 10,000 次。

是否有 SQL 示例或方法来显示容器压力(每秒记录一次)在 10 bar 和 100 bar 之间循环的次数?

根据以下评论进行编辑:

表结构:

CREATE TABLE log_934 (datetime timestamp primary key, pt001 real, pt002 real ...);

数据通过外部程序每秒插入表中,其中“pt”值是压力。等效的 INSERT 命令是:

INSERT INTO log_934 (datetime, pt001, pt002 ... ) VALUES ('2015-05-10 10:00:00', 50.65, 75.54 ...);
INSERT INTO log_934 (datetime, pt001, pt002 ...) VALUES ('2015-05-10 10:00:01, 50.69, 75.49 ...);
...

预期的结果是:

|pt001 cycled between 10 and 100|
---------------------------------
|50                             |

【问题讨论】:

  • 请发布表定义(如CREATE TABLE)一些示例数据(如INSERT INTO 语句)以及基于该示例数据的预期输出。
  • 列 (pt001, pt002, ...) 代表什么?它们是气体发生器中的传感器吗?什么是压力循环?这是从 10 bar 到 100 bar 的值,还是您正在寻找该范围内的任何读数,对于每一列?结果中的 50 代表什么?
  • 是的,PT 是工厂中的压力传感器。压力循环是指压力值从 10 变为 100 或反之亦然。结果值 50 将表明生成器已经从 10 到 100 或 100 到 10 ... 50 次。

标签: sql postgresql


【解决方案1】:

我的第一种方法:

select count(*) from (
    select distinct max(lmin.datetime) as inflexion
    from log_934 lmax
    inner join log_934 lmin on lmax.datetime > lmin.datetim and 
                               lmin.pt001 <= 10
    where lmax.pt001 >= 100
    group by lmax.datetime

    union all

    select distinct max(lmax.datetime) as inflexion
    from log_934 lmin
    inner join log_934 lmax on lmin.datetime > lmax.datetim and 
                               lmax.pt001 >= 100
    where lmin.pt001 <= 10
    group by lmin.datetime
) T

第一个子查询为每个 >100 个日期时间读取获取 d3js 中看到它:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多