为文字墙道歉,最后的例子解释了我的问题。任何帮助表示赞赏,谢谢!
我有一个表格,其中包含来自其他值电压和电流的几列数据。
当有电流流动时,每秒都会记录这些实例。我想从这些值计算一个近似值kJ
和。kW
基本上我有一张表,instances
其中包含:
instanceID
,location
,current
,voltage
,time
.
另一个,sets
,包含:
instanceID
,setID
.
instanceID
相同,instanceID
in 实例是指向集合的 FK 。对于实例中的每个位置,大约有 23 行(变化)。有30个地点。所以我有 23 行,其中实例的位置 1,另外 23 行用于位置 2 的同一实例,依此类推。时间是采集测量数据的记录时间(因此,如果所有 23 个实例之间的差异为 1 秒,则第一次和最后一次之间的差异为 23 秒)。
我需要计算平均值kW
和总数kJ
(近似值)。
我所做的如下:
SELECT instances.instanceID, location, current,
voltage, current * voltage AS kW,
COUNT(IF(current > 0 AND voltage > 0,
instances.instanceID,
0)) AS InstancedTime
FROM instances
INNER JOIN sets ON instances.instanceID = sets.instanceID
WHERE sets.setID = arbitrary_number;
问题出现了,我得到下表:
instanceID, location, current, voltage, kW, InstancedTime
这kW
是来自 23 个集合之一的随机数,这很好,因为它无论如何都是一个近似值,但是当我只希望查询计算每个位置的实例时,它COUNT(IF())
正在计算实例表中的所有实例。
我试过了MAX(CAST(time AS SIGNED)) - MIN(CAST(time AS SIGNED))
,但这需要从最后一个位置减去第一个位置的最短时间的最大时间,我想一次将它隔离到一个位置。
我想要做的是得到总数量,kJ
即它有功率的时间乘以那个时间的千瓦。由于我知道实例之间的时间始终为 1 秒,因此计算各个位置的实例数并将其乘以 就足够了kW
,但是我想对一组中的所有实例执行此操作。可以通过对所有单个实例使用单个查询来替换该集合,但这需要很长时间。
我正在尝试一张看起来像的桌子
instanceID, location, current, voltage, kW, InstancedTime
1, 1, 500V, 2A, 1kW, 1s
1, 1, 500V, 2A, 1kw, 1s
1, 2, 400V, 3A, 1.2kW, 1s
1, 2, 400V, 3A, 1.2kW, 1s
2, 1, 700V, 2A, 1.4kW, 1s
2, 1, 700V, 2A, 1.4kw, 1s
2, 2, 300V, 3A, 0.9kW, 1s
2, 2, 300V, 3A, 0.9kW, 1s
并添加kJ
将总结 ID 1 已在位置 1 和位置 2 中的实例数,对 ID 2 执行相同操作并将所有这些都显示在一个表格中,如下所示:
instanceID, location, current, voltage, kW, SumInstancedTime, kJ
1, 1, 500V, 2A, 1kW, 2s, 2kJ
1, 2, 400V, 3A, 1.2kW, 2s, 2.4kJ
2, 1, 700V, 2A, 1.4kW, 2s, 2.8kJ
2, 2, 300V, 3A, 0.9kW, 2s, 1.8kJ
感谢您的宝贵时间,感谢您提供的任何帮助!