Autor | Zpráva | ||
---|---|---|---|
osvaldik Profil |
Zdravim,
prosim o radu jak na sql dotaz. Do db se me kazdy den ve 23:59 uklada zaznam spotrebovane energie z podruzneho elektromeru. Potreboval bych vygenerovat kolik se za den spotrebuje, tzn. odecist posledni zaznam od predposledniho. Jelikoz s sql nemam prozatim zadne zkusenosti, pisu sem o pomoc nez to poradne pochopim. Diky |
||
Kajman Profil |
#2 · Zasláno: 19. 11. 2014, 12:56:17
Jak vypadá tabulka s těmi zápisy? Je tam kromě stavu i datum, id odečtu nebo něco takového?
Pro jakou databázi má sql dotaz fungovat? |
||
osvaldik Profil |
#3 · Zasláno: 19. 11. 2014, 14:11:32
Kajman:
tabulka |ID|time|spotreba |183650|2014-11-16 23:59:01|315.891 |183936|2014-11-17 23:59:01|318.255 |184225|2014-11-18 23:59:01|320.759 databaze je mysql |
||
Kajman Profil |
#4 · Zasláno: 19. 11. 2014, 14:45:21
A řádek tam vznikne každých pět minut, nebo tam jsou jen ty časy před půlnocí?
|
||
osvaldik Profil |
#5 · Zasláno: 19. 11. 2014, 16:04:51
Kajman:
vznikne kazdych 5 min., tabulka je bez hodnot null |
||
Kajman Profil |
#6 · Zasláno: 19. 11. 2014, 21:27:48
V tom případě bych asi udělal pomocnou tabulku s kalendářem.
datum ... 2014-11-16 2014-11-17 2014-11-18 ... Pak si pro každý potřebný den můžete najít korelovaným poddotazem hodnotu z posledního měření a odečíst poslední měření před tím dnem. Něco jako SELECT k.datum, (SELECT e.spotreba FROM elektromer e WHERE e.time >= k.datum AND e.time < Date_add(k.datum, INTERVAL 1 day) ORDER BY e.time DESC LIMIT 1) - (SELECT e.spotreba FROM elektromer e WHERE e.time < k.datum ORDER BY e.time DESC LIMIT 1) AS rozdil FROM kalendar k WHERE k.datum BETWEEN '2014-11-01' AND '2014-11-19' ORDER BY k.datum Pro ten dotaz se hodí index nad sloupcem time, ale vkládání bude pak s vyšší režií a na disku ten index také něco navíc zabere. |
||
osvaldik Profil |
#7 · Zasláno: 19. 11. 2014, 23:37:41
diky, zkusim se v tom trochu vyznat ;-)
|
||
Časová prodleva: 9 let
|
0