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
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
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
A řádek tam vznikne každých pět minut, nebo tam jsou jen ty časy před půlnocí?
osvaldik
Profil
Kajman:
vznikne kazdych 5 min., tabulka je bez hodnot null
Kajman
Profil
V tom případě bych asi udělal pomocnou tabulku s kalendářem.

datum
...
2014-11-16
2014-11-17
2014-11-18
...
(občas se může hodit více sloupců - den v týdnu, rozlišení víkendů, svátků, samostatné sloupce pro rok, měsíc, den, ...)

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
diky, zkusim se v tom trochu vyznat ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: