Hallo Heiko,
sorry, dass es etwas gedauert hat.
Ich habe es dann jetzt mal im original Oracle MySQL Docker Container getestet und der Syntax funktioniert einwandfrei.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
mysql> set @V:= 0, @diff:= 0, @diffTotal:= 0, @RB:= 1;
Query OK, 0 rows affected (0.00 sec)
mysql> select @V, @diff, @diffTotal, @RB;
+------+-------+------------+------+
| @V | @diff | @diffTotal | @RB |
+------+-------+------------+------+
| 0 | 0 | 0 | 1 |
+------+-------+------------+------+
mysql>
SELECT TIMESTAMP,
VALUE,
if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF,
@V:= VALUE as VALUEBEFORE,
@RB:= '0' as RBIT
FROM history
WHERE ( DEVICE = 'WR_0_KSEM' )
AND ( READING = 'Active_energy+' )
AND TIMESTAMP >= '2022-11-29'
AND TIMESTAMP < '2022-11-30'
ORDER BY TIMESTAMP;
+---------------------+-------+------+-------------+------+
| TIMESTAMP | VALUE | DIFF | VALUEBEFORE | RBIT |
+---------------------+-------+------+-------------+------+
| 2022-11-29 00:29:54 | 7770 | 0 | 7770 | 0 |
| 2022-11-29 04:35:55 | 7771 | 1 | 7771 | 0 |
| 2022-11-29 08:27:56 | 7772 | 1 | 7772 | 0 |
<snip>
| 2022-11-29 19:26:11 | 7786 | 1 | 7786 | 0 |
| 2022-11-29 22:50:11 | 7787 | 1 | 7787 | 0 |
+---------------------+-------+------+-------------+------+
mysql>
SELECT sum(DIFF)
FROM (
SELECT TIMESTAMP,
VALUE,
if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF,
@V:= VALUE as VALUEBEFORE,
@RB:= '0' as RBIT
FROM history
WHERE ( DEVICE = 'WR_0_KSEM' )
AND ( READING = 'Active_energy+' )
AND TIMESTAMP >= '2022-11-29'
AND TIMESTAMP < '2022-11-30'
ORDER BY TIMESTAMP
) SUM ;
+-----------+
| sum(DIFF) |
+-----------+
| 17 |
+-----------+
Falls Du noch weitere Tests haben möchtest, dann melde Dich einfach.
VG Christian