浮動小数点数が変更された場合にのみ MySQL を選択する
P粉158473780
2023-09-04 00:01:04
<p>次のデータテーブルがあります:</p>
<em>テーブル名entity_values</em></p>
<テーブルクラス="s-テーブル">
<頭>
<tr>
日付時刻 |
値 |
</tr>
</頭>
<みんな>
<tr>
2017-09-02 05:05:00 |
20 |
</tr>
<tr>
2017-09-02 05:10:00 |
20 |
</tr>
<tr>
2017-09-02 05:15:00 |
21 |
</tr>
<tr>
2017-09-02 05:20:00 |
21 |
</tr>
<tr>
2017-09-02 05:25:00 |
21 |
</tr>
<tr>
2017-09-02 05:30:00 |
22 |
</tr>
</tbody>
</テーブル>
<p>現時点では変更を確認したいだけなので、次のクエリを作成しました。</p>
<pre class="brush:php;toolbar:false;">SELECT date_time AS 'time',
value - LAG(value) over (date_time順) 'Kwh01-Energy (kWh)'
FROM エンティティ値;</pre>
<p>これにより、次の結果が返されます: </p>
<テーブルクラス="s-テーブル">
<頭>
<tr>
日付時刻 |
値 |
</tr>
</頭>
<みんな>
<tr>
2017-09-02 05:00:00 |
0 |
</tr>
<tr>
2017-09-02 05:05:00 |
0 |
</tr>
<tr>
2017-09-02 05:10:00 |
1 |
</tr>
<tr>
2017-09-02 05:15:00 |
0 |
</tr>
<tr>
2017-09-02 05:20:00 |
0 |
</tr>
<tr>
2017-09-02 05:25:00 |
1 |
</tr>
</tbody>
</テーブル>
<p>ウィンドウ関数 <em> では、次のような </em> を WHERE 句で使用することはできません。
<pre class="brush:php;toolbar:false;">SELECT date_time AS 'time',
value - LAG(value) over (date_time順) 'Kwh01-Energy (kWh)'
FROM エンティティ値
WHERE (値 - LAG(値) オーバー (日時順)) > 0;
<ブロック引用>
<p>エラー コード: 3593。このコンテキストではウィンドウ関数「lag」を使用できません。</p>
</blockquote>
<p><strong>質問</strong>: 0 の値を除外し、「変更された」値のみを取得するにはどうすればよいですか?
望ましい結果: </p>
<テーブルクラス="s-テーブル">
<頭>
<tr>
日付時刻 |
値 |
</tr>
</頭>
<みんな>
<tr>
2017-09-02 05:10:00 |
1 |
</tr>
<tr>
2017-09-02 05:25:00 |
1 |
</tr>
</tbody>
</table></p>
ありがとう@アンドリュー
リーリー