微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SQLite 进行消费跟踪

如何解决使用 SQLite 进行消费跟踪

我正在尝试查询 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 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。