Portál AbcLinuxu, 7. května 2024 22:07


Dotaz: MariaDB výpočet dení (a hodinové) spotřeby

24.8.2015 12:36 DrNo
MariaDB výpočet dení (a hodinové) spotřeby
Přečteno: 1123×
Odpovědět | Admin
Zravím

K monitoringu spotřeby elektřiny jsem vytahl z elektromeru (přes LEDku co signalizuje odběr, S0 vystup je zaplombován a přenos z rozvaděče na kraji pozemku mám vyřešený bezdrátově) a hodnoty ukládám do MariaDB měří a uládá se každé 2 minuty v tabulce je dalších několik hodnot na které je to akorád.
datetime	        EL_celkem      AD1..
2015-08-24 11:44:01	419.533	       xxxx..
2015-08-24 11:42:01	419.533        xxxx..
2015-08-24 11:40:01	419.534        xxxx..
dotazem
SELECT * FROM `tabulka` WHERE `datetime` LIKE '%20%%-%%-%% %%:00%' ORDER BY `datetime` DESC LIMIT 24
nebo
SELECT * FROM `tabulka` WHERE `datetime` LIKE '%20%%-%%-%% 00:00%' ORDER BY `datetime` DESC LIMIT 31
datetime	        EL_celkem      AD1..
2015-08-24 00:00:01	419.533	       xxxx..
2015-08-23 00:00:01	409.413        xxxx..
2015-08-22 00:00:01	403.741        xxxx..
dostanu stavy elektroměru po hodinových nebo po denních přírůstcích.

A tady jsem se zasekl a proto prosím o radu jak ty přírůstky sečíst a dostat hodnoty spotřeby za hodinu nebo za den.

Stejný dotaz jsem našel na http://www.abclinuxu.cz/poradna/databaze/show/396499 akorád s vodoměrem a PostgreSQL.

Bohužel na otázku rADOna umi neco takovyho mysql? byla Pokud vím, tak ne. Musel by jste si pomoci cursorem. A to je něco co netuším co je a nedokážu to vygooglovat, nejsem programátor ale elektronik a nemůžu s tím hnout. Děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.8.2015 14:41 NN
Rozbalit Rozbalit vše Re: MariaDB výpočet dení (a hodinové) spotřeby
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neco jako:
select sum(EL_celkem) from table where `datetime` ..
24.8.2015 15:02 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: MariaDB výpočet dení (a hodinové) spotřeby
Spotřeba za den
SELECT 
  DATE_FORMAT(`datetime`, "%d.%m.%Y") AS `Den`, 
  MAX(EL_celkem) - MIN(EL_celkem) AS `Spotřeba` 
FROM 
  tabulka 
GROUP BY 
  1
;
Spotřeba za hodinu
SELECT 
  DATE_FORMAT(`datetime`, "%d.%m.%Y") AS `Den`,
  CONCAT(DATE_FORMAT(MIN(`datetime`), "%h:%i"), " - ", DATE_FORMAT(MAX(`datetime`), "%h:%i")) AS `Hodiny`,
  MAX(EL_celkem) - MIN(EL_celkem) AS `Spotřeba` 
FROM 
 tabulka
GROUP BY 
  DATE_FORMAT(`datetime`, "%d.%m.%Y %h")
;
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
24.8.2015 15:44 NN
Rozbalit Rozbalit vše Re: MariaDB výpočet dení (a hodinové) spotřeby
Hm, no mozek nezaregistroval, ze se jedna o prirustky ;) ..
25.8.2015 12:23 DrNo
Rozbalit Rozbalit vše Re: MariaDB výpočet dení (a hodinové) spotřeby
Děkuji moc! i všem ostatním za náměty.
24.8.2015 21:33 Denny
Rozbalit Rozbalit vše Re: MariaDB výpočet dení (a hodinové) spotřeby
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli se to má zpracovávat v databázi tak by šlo přidat si sloupec spotřeba a napsat trigger, který vždy po vložení dopočítá spotřebu mezi nově odečtenou hodnotou a tou z předchozího zápisu. A pak volat select s group by a sum(spotreba).

případně tady je neefektivní, neelegatní, hloupoučká a potencionálně chybová procedura, která teoreticky dělá něco obdobnýho:
CREATE PROCEDURE p()
BEGIN

  CREATE TEMPORARY TABLE `tmp` AS SELECT * FROM `tabulka`;
  ALTER TABLE `tmp` ADD `EL_den_pred` DECIMAL(10,4) NOT NULL AFTER `EL_celkem`;
  ALTER TABLE `tmp` ADD `spotreba` DECIMAL(10,4) NOT NULL AFTER `EL_den_pred`;
  UPDATE `tmp` p SET p.`EL_den_pred` = (SELECT t.`EL_celkem`  FROM `tabulka` t WHERE t.`datetime` = p.`datetime` - INTERVAL 1 DAY );
  UPDATE `tmp` SET `spotreba` = (`EL_celkem` - `EL_den_pred`);

  SELECT YEAR(`datetime`), MONTH(`datetime`), SUM(`spotreba`) FROM `tmp` WHERE 1 GROUP BY DATE_FORMAT(`datetime`, '%Y%m');
  SELECT  * FROM `tmp`;
END //

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.