Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL行状态更改之间的时间间隔_Sql_Sqlite - Fatal编程技术网

SQL行状态更改之间的时间间隔

SQL行状态更改之间的时间间隔,sql,sqlite,Sql,Sqlite,我有一个sqlite3表格,它每30秒记录一次我的加热系统和炉子的状态。这张桌子看起来像这样 TABLE CLIMATESYSTEM ( id INTEGER PRIMARY KEY AUTOINCREMENT, Timestamp INT, FAN INT, SYSTEM INT ); 5577|1452049280|1|1 5578|1452049339|1|1 5579|1452049399|1|1 5580|1452049459|1|1 5581|145

我有一个sqlite3表格,它每30秒记录一次我的加热系统和炉子的状态。这张桌子看起来像这样

TABLE CLIMATESYSTEM (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    Timestamp INT,
    FAN INT,
    SYSTEM INT
);
5577|1452049280|1|1
5578|1452049339|1|1
5579|1452049399|1|1
5580|1452049459|1|1
5581|1452049520|0|0
5582|1452049580|0|0
5583|1452049644|1|1
5584|1452049700|1|1
5585|1452049760|1|1
5586|1452049820|0|0
timestamp是自python中的epoch((int)time.time)起的秒数

桌子上有几行是这样的

TABLE CLIMATESYSTEM (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    Timestamp INT,
    FAN INT,
    SYSTEM INT
);
5577|1452049280|1|1
5578|1452049339|1|1
5579|1452049399|1|1
5580|1452049459|1|1
5581|1452049520|0|0
5582|1452049580|0|0
5583|1452049644|1|1
5584|1452049700|1|1
5585|1452049760|1|1
5586|1452049820|0|0
我试图做的是计算从开启(1)到关闭(0)的状态转换与从关闭到开启的下一次转换之间的时间秒数

示例计算#5577和#5581之间的秒数->添加到时间系统打开

示例计算#5581和#5583->添加到时间系统关闭之间的秒数

我打算做的是测量我的供暖系统在24小时内运行的总时间

关于起点有什么想法吗


谢谢

首先,查找每行的下一个时间戳:

SELECT Timestamp,
       (SELECT MIN(Timestamp)
        FROM ClimateSystem AS CS2
        WHERE CS2.Timestamp > ClimateSystem.Timestamp
       ) AS NextTimestamp,
       System
FROM ClimateSystem;
然后使用该值计算每个间隔的长度:

SELECT NextTimestamp - Timestamp,
       System
FROM (SELECT Timestamp,
             (SELECT MIN(Timestamp)
              FROM ClimateSystem AS CS2
              WHERE CS2.Timestamp > ClimateSystem.Timestamp
             ) AS NextTimestamp,
             System
      FROM ClimateSystem);
然后根据需要添加过滤器:

SELECT SUM(NextTimestamp - Timestamp),
       System
FROM (SELECT Timestamp,
             (SELECT MIN(Timestamp)
              FROM ClimateSystem AS CS2
              WHERE CS2.Timestamp > ClimateSystem.Timestamp
             ) AS NextTimestamp,
             System
      FROM ClimateSystem)
WHERE Timestamp BETWEEN :StartOfDay AND :EndOfDay
GROUP BY System;

请澄清第三列,
风机
与问题的关系。风机列显示风机是否在运行(因为风机在熔炉关闭后运行)。对于这个问题,没有考虑。