テキストの壁についてお詫び申し上げます。最後の例は私の質問を説明しています。どんな助けでも大歓迎です、ありがとう!
他の値の電圧と電流の中からのデータのいくつかの列を含むテーブルがあります。
これらのインスタンスは、電流が流れているときに毎秒記録されます。これらの値から近似値kJ
を計算したいと思います。kW
基本的にinstances
、以下を含む1 つのテーブルがあります。
instanceID
、location
、current
、voltage
、time
.
そして、次のsets
ものを含む別のもの:
instanceID
、setID
.
これinstanceID
は同じで、instanceID
in インスタンスはセットを指す FK です。インスタンス内のすべての場所には、約 23 行 (さまざま) があります。30ヶ所あります。したがって、インスタンスの場所が 1 の 23 行、同じインスタンスの場所が 2 の別の 23 行などがあります。Time は、測定データが取得されたときの記録された時間です (つまり、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 セットの 1 つからの乱数であり、とにかく概算であるため問題ありませんが、クエリですべての場所のインスタンスのみをCOUNT(IF())
カウントする場合は、インスタンス テーブル内のすべてのインスタンスをカウントしています。
を試しましたが、最後のMAX(CAST(time AS SIGNED)) - MIN(CAST(time AS SIGNED))
場所からの最大時間から最初の場所の最小時間を引いた時間がかかります。一度に 1 つの場所に分離したいと考えています。
私がやりたいのは、その総量を取得することですkJ
。これは、電力があった時間にその時間の kW を掛けたものです。インスタンス間の時間は常に 1 秒であることはわかっているので、個々の場所のインスタンス数を数えて を掛ければ十分ですが、 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 について同じことを行い、これを次のような 1 つのテーブルにすべて表示する を追加します。
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
お時間をいただきありがとうございます。提供されたヘルプは大歓迎です!