gpt4 book ai didi

mysql - 查找非连续存储的 SQL 记录之间的差异

转载 作者:行者123 更新时间:2023-11-29 05:43:12 26 4
gpt4 key购买 nike

我有一个 MYSQL 表,用于存储我家太阳能发电的数据。我正在轮询两个逆变器设备,它们包含此表中的数据。为了简化,我的表结构(带有描述)的相关部分是这样的:

id <auto_increment>
addr <int address of the inverter>
etotal <total generation since the device has been online>

我正在尝试找出每个逆变器 的连续记录之间的差异,以便我可以判断在记录之间的时间段内(或我最终选择的任何时间段之间)产生了多少能量。如果记录插入一致,我可以做类似的事情:

SELECT (t2.etotal - t1.etotal) AS eperiod 
FROM solars AS t1, solars AS t2
WHERE t1.id+2 = t2.id AND t1.created_at >= CURDATE()
AND t1.addr = 245 AND t2.addr = 245 ORDER BY t1.id;

但是,这并不总能按预期运行,而且这似乎是一个糟糕的选择。我唯一的另一个想法是选择一个具有自动递增 id 的临时表,然后从该表中进行类似的选择。如果可能,对单个查询解决方案感兴趣。

最佳答案

SELECT  @ptotal - etotal, @ptotal := etotal
FROM solars
WHERE created_at >= CURDATE()
AND addr = 245
ORDER BY
created_at, id

在处理结果时忽略第二列或将其包装到嵌套查询中(尽管它可能会慢一点):

SELECT  diff
FROM (
SELECT @ptotal - etotal AS diff, @ptotal := etotal
FROM solars
WHERE created_at >= CURDATE()
AND addr = 245
ORDER BY
created_at, id
) q

(addr, created_at, id) 上创建复合索引以使其快速运行。

还应支持柴油发电机(未测试)。

关于mysql - 查找非连续存储的 SQL 记录之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4806900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com