Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
使用SQLite进行消费跟踪_Sql_Sqlite_Consumption - Fatal编程技术网

使用SQLite进行消费跟踪

使用SQLite进行消费跟踪,sql,sqlite,consumption,Sql,Sqlite,Consumption,我试图查询sqlite,它给出了电能表的消耗量。如果我想创建一个简单的示例: CREATE TABLE datalog ( id INTEGER PRIMARY KEY AUTOINCREMENT, tstamp DATETIME DEFAULT CURRENT_TIMESTAMP, rValue REAL); INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 00:00:01', 25.1); INSERT INTO da

我试图查询sqlite,它给出了电能表的消耗量。如果我想创建一个简单的示例:

CREATE TABLE datalog (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 tstamp DATETIME DEFAULT CURRENT_TIMESTAMP,
 rValue REAL);


INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 00:00:01', 25.1);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 00:15:01', 26.2);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 00:30:01', 27.5);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 00:45:01', 28.8);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 01:00:01', 29.4);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 01:15:01', 30.2);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 01:30:01', 31.5);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 01:45:01', 32.2);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 02:00:01', 33.9);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 02:15:01', 35.2);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 02:30:01', 36.1);
INSERT INTO datalog (tstamp,rValue) VALUES ('2020-01-02 15:30:01', 80.4);
我想为该表编写一个查询,通过选择今天的第一个读取值和日期时间(如果我们假设它是2020-01-02,则为今天)和今天的最后一个读取值和日期时间,给出电表的消耗量,并给出下表

startDT             | startValue | lastDT              | lastValue | consumption
2020-01-02 00:00:01 | 25.1       | 2020-01-02 15:30:01 | 80.4      | 55.3

没关系,我通过做更多的研究解决了这个问题

答案是在FROM子句中使用多个子查询

SELECT
startData.tstamp AS 'starttime',
startData.rValue AS 'startvalue',
lastData.tstamp AS 'lasttime',
lastData.rValue AS 'lastvalue',
(lastData.rValue-startData.rValue) AS 'consumption'
FROM (  SELECT tstamp, rValue
        FROM datalog
        WHERE   tstamp>= datetime('now','start of day')
        ORDER BY tstamp ASC LIMIT 1) startData,
     (  SELECT tstamp,rValue
        FROM datalog
        WHERE tstamp>= datetime('now','start of day')
        ORDER BY tstamp DESC LIMIT 1) lastData;

无需交叉连接2个子查询。
您可以使用窗口功能执行此操作:

SELECT DISTINCT
       MIN(tstamp) OVER () startDT,
       FIRST_VALUE(rValue) OVER (ORDER BY tstamp) startValue,
       MAX(tstamp) OVER () lastDT,
       FIRST_VALUE(rValue) OVER (ORDER BY tstamp DESC) lastValue,
       FIRST_VALUE(rValue) OVER (ORDER BY tstamp DESC) - FIRST_VALUE(rValue) OVER (ORDER BY tstamp) consumption
FROM datalog
WHERE date(tstamp) = CURRENT_DATE