Hmm ale tytuł tematu .
Zapisuje w bazie dane z licznika energii elektrycznej co 5 min. Mam kolumne id_pomiar - auto, DataCzas - timestamp, oraz pomiar jako INT.
chodzi mi oto żeby doczytywać zurzycie energo na koniec kazdego dnia, całoś moge ograniczyć limitem do ostatnich 31 wynikow na przykład.
Pytanie ma ktoś pomysł jak skonstrułować takiego select-a. Jesli chodzi o bazy danych to nie jestem zbyt mocny może popełniłem blad i powinienem w innej tabeli zapisywac stan licznika na godz 0.00 ale to dublowanie danych.
Czekam na podpowiedzi. Pozdrawiam
SELECT t1.DataCzas, t1.pomiar FROM tabela AS t1 INNER JOIN (SELECT id_pomiar, MAX(DataCzas) AS DataCzas FROM tabela GROUP BY id_pomiar) AS t2 ON t1.id_pomiar = t2.id_pomiar;
@trueblue dziekuje za szybką podpowiedź
niestety to rozwiazanie wyswietla mi wszystkie zapisane wiersze.
Znalazłem rozwiazanie które działa uważam temat za zamkniety.
SELECT d1.* FROM tabela d1, (SELECT date(DataCzas), max(DataCzas) AS max_DataCzas FROM tabela GROUP BY date(DataCzas) ) d2 WHERE d1.DataCzas= d2.max_fecha AND d1.DataCzas>= '2024-02-08 23:59:59' - INTERVAL 30 DAY
Fakt.
Poprawka:
SELECT t1.DataCzas, t1.pomiar FROM tabela AS t1 INNER JOIN (SELECT DATE(DataCzas), MAX(DataCzas) AS DataCzas FROM tabela GROUP BY DATE(DataCzas)) AS t2 ON t1.DataCzas = t2.DataCzas;
WHERE d1.DataCzas= d2.max_DataCzas
Tak masz racje mój błąd podczas kopiowania, u mnie nazwa tabeli i kolumn maja inne nazwy te podałem jako przykład zeby było zrozumiale.
Dziekuję twoje rozwiązanie też teraz działa kolejny przykład ze na wszystko znajdzie sie jakies rozwiazanie nie kiedy wiecej niż jedno.
WHERE d1.DataCzas= d2.max_DataCzas
Tu jest przykład z narastającym: https://kawalekkodu.pl/pare-to-lama-czyli-o-sumie-skumulowanej-oraz-diagramie-pareta-w-mysql
Musisz resetować "licznik" każdego dnia.
Dzienne zuzycie zrobiłem w ten sposób, zostawiłem już moje nazwy tabel i kolumn
SELECT DATE(d1.enmes_ts), d1.`enmes_kWh`, d1.enmes_kWh-(SELECT enmes_kWh FROM LMG_enmes WHERE DATE(enmes_ts)= DATE_SUB(DATE(d1.enmes_ts), INTERVAL 1 DAY) AND `enmes_mesgerid` = 1 ORDER BY `enmes_id` DESC LIMIT 1 )AS diff_kWh FROM LMG_enmes d1, (SELECT date(`enmes_ts`), MAX(`enmes_ts`) AS max_fecha FROM LMG_enmes GROUP BY date(enmes_ts) ) d2 WHERE d1.enmes_ts = d2.max_fecha AND `enmes_mesgerid` = 1 ORDER BY `enmes_ts` ASC
SELECT d1.* FROM LMG_enmes d1, (SELECT MAX(`enmes_id`) AS max_id FROM LMG_enmes WHERE `enmes_mesgerid` = 1 GROUP BY LAST_DAY(enmes_ts) ) d2 WHERE d1.enmes_id = d2.max_id AND `enmes_mesgerid` = 1 ORDER BY `enmes_id` ASC;
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)