-- Preistabellen der Statistik: feste Zahlen rein, Redundanz raus. -- -- 1) gasCosts und fuelCosts lagen unbenutzt herum; ajax/getStats.php rechnete -- stattdessen mit drei fest eingetragenen Zahlen: -- -- 140 Grundpreis Strom pro Jahr -> gridCosts.base -- 0.063 Gaspreis je kWh -> gasCosts.cost / gasCosts.kwhPerLitre -- 24.5 12 * kWh je Liter Benzin -> fuelCosts.lPer100km / kwhPer100km -- -- Beim Gas stand der Energieinhalt bisher nur als Kommentar an der Spalte -- ("6.58kWh/l"), beim Benzin steckte er unsichtbar im Teiler 24.5. Beides -- ist keine Physik, die sich nie aendert, sondern haengt am Brennstoff und -- am Ersatzfahrzeug - und gehoert deshalb neben den Preis. -- -- Beim Auto nicht als "kWh je Liter": diese Zahl steht auf keinem Datenblatt -- und niemand hat sie im Kopf. Eingetragen werden die beiden Verbraeuche, -- die man kennt - Liter je 100 km beim Verbrenner, kWh je 100 km beim -- Stromer. Wieviele Liter eine geladene kWh ersetzt, rechnet die Abfrage -- daraus aus. -- -- 2) end_date faellt weg. Die Spalte war reine Redundanz: sie sagte nie etwas -- anderes als "Tag vor dem naechsten Stichtag" - konnte aber, weil sie -- eigenstaendig gepflegt wurde, etwas anderes sagen. Genau das war -- passiert: gridCosts liess zwei Zeilen ueber das erste Quartal 2023 -- laufen, der JOIN in getStats.php fand fuer jeden Messwert zwei Preise, -- und der Stromverbrauch 2023 stand mit 2527 statt 1674 kWh in der -- Statistik - 51 % zu hoch. -- -- Ohne die Spalte laesst sich eine Ueberlappung nicht mehr hinschreiben, -- und eine Luecke auch nicht. Das Ende einer Zeile holt sich die Abfrage -- mit LEAD(active_date) beim naechsten Stichtag; die juengste Zeile hat -- kein Ende und gilt weiter, bis ein neuer Preis eingetragen wird. So -- verhaelt sich ein Tarif ja auch. -- -- Nebenbei ist die Statistik dadurch rund viermal so schnell (2,9 s -> 0,7 s -- je Jahr): der Optimierer schlaegt die drei kleinen Preistabellen einmal -- auf, statt fuer jeden der 100.000 Messwerte einen Bereich zu durchsuchen. -- -- Anwenden: mysql -h -P 3310 -u solarLog -p solarLog < solarLog_costs.sql ALTER TABLE `gridCosts` ADD COLUMN `base` float NOT NULL DEFAULT 0 COMMENT 'Grundpreis pro Jahr in Euro' AFTER `gain`, DROP KEY `end_date`, DROP COLUMN `end_date`; -- Bis hierher stand die 140 fest im SQL - fuer alle Jahre gleich. UPDATE `gridCosts` SET `base` = 140; -- Die Zeile ab 2022-12-13 lief bis 2023-03-31 und ueberlappte damit die -- naechste. Ohne end_date endet sie automatisch am 31.12.2022. ALTER TABLE `gasCosts` ADD COLUMN `kwhPerLitre` float NOT NULL DEFAULT 6.58 COMMENT 'Energieinhalt: kWh je Liter'; ALTER TABLE `fuelCosts` ADD COLUMN `lPer100km` float NOT NULL DEFAULT 9.8 COMMENT 'Verbrauch des Verbrenners in Liter je 100 km', ADD COLUMN `kwhPer100km` float NOT NULL DEFAULT 20 COMMENT 'Verbrauch des Elektroautos in kWh je 100 km', DROP KEY `end_date`, DROP COLUMN `end_date`;