Mailinglisten-Archive |
Hallo Cris, > Zeit Zählerstand Diff > 01.01. 5000 0 > 02.01. 5010 10 > 03.01. 5020 20 > 04.01. 0 30 (Zählerwechsel bei 5030) > 05.01. 10 40 > 06.01. 20 50 da steckt ein Denkfehler drin, der Zählerwechsel benötigt zwei Eintragungen, siehe weiter unten. > Wenn jetzt als nächstes der Zählerstand am 08.01. kommt, ich > aber den vom 07.01. nachreichen will stoße ich auf das Problem. nöö ;-) Und nun mein Beispiel: CREATE TABLE elektro ( zeit datetime NOT NULL default '0000-00-00 00:00:00', stand int(11) NOT NULL default 0, PRIMARY KEY (zeit) ) TYPE=MyISAM; INSERT INTO strom (zeit, stand) VALUES # die Basis ('2008-01-01 13:57:14', 5001), ('2008-01-02 14:46:25', 5012), ('2008-01-03 15:35:36', 5023), ('2008-01-04 16:24:47', 4), ('2008-01-05 17:13:58', 15), ('2008-01-06 18:02:09', 26); INSERT INTO strom (zeit, stand) VALUES # Nachtrag Zählerwechsel ('2008-01-04 15:57:33', 5037); INSERT INTO strom (zeit, stand) VALUES ('2008-01-08 11:47:11', 48); INSERT INTO strom (zeit, stand) VALUES # Nachtrag ('2008-01-07 11:23:33', 39); mysql> select * from strom; +---------------------+-------+ | zeit | stand | +---------------------+-------+ | 2008-01-01 13:57:14 | 5001 | | 2008-01-02 14:46:25 | 5012 | | 2008-01-03 15:35:36 | 5023 | | 2008-01-04 16:24:47 | 4 | | 2008-01-05 17:13:58 | 15 | | 2008-01-06 18:02:09 | 26 | | 2008-01-04 15:57:33 | 5037 | | 2008-01-08 11:47:11 | 48 | | 2008-01-07 11:23:33 | 39 | +---------------------+-------+ zeigt, dass alles schön durcheinander steht, und das ist gut so. Datenbanktabellen sind definitionsgemäß ordnungslose Mengen. Und nun versuche ich eine Abfrage zu bauen, die Dir zu jeder Zeit verwendbare Werte ausgibt, also auch zwischen den Nachträgen. Zuerst brauchen wir eine Variable: SET @older=4987; # ein älterer Zählerstand Und dann kann es losgehen: SELECT zeit, stand, IF (@older < stand, stand - @older, 0) AS verbrauch, (@older := stand) AS help FROM strom ORDER BY zeit; +---------------------+-------+-----------+------+ | zeit | stand | verbrauch | help | +---------------------+-------+-----------+------+ | 2008-01-01 13:57:14 | 5001 | 14 | 5001 | | 2008-01-02 14:46:25 | 5012 | 11 | 5012 | | 2008-01-03 15:35:36 | 5023 | 11 | 5023 | | 2008-01-04 15:57:33 | 5037 | 14 | 5037 | | 2008-01-04 16:24:47 | 4 | 0 | 4 | | 2008-01-05 17:13:58 | 15 | 11 | 15 | | 2008-01-06 18:02:09 | 26 | 11 | 26 | | 2008-01-07 11:23:33 | 39 | 13 | 39 | | 2008-01-08 11:47:11 | 48 | 9 | 48 | +---------------------+-------+-----------+------+ Wie man sieht kann man jederzeit Werte in die Tabelle nachtragen, ohne dass es zu Fehlern kommt. Wünschenswert wäre eventuell noch eine Ausgabe der Dauer in Stunden, damit größere Zeiträume sofort ins Auge fallen. Aber ich will Dir nicht alles wegnehmen ;-) mit bestem Gruß Carlo
php::bar PHP Wiki - Listenarchive