Autor Zpráva
wajta
Profil *
Zdravím, potřeboval bych pomoc s následujícím problémem.

V mysql mám tabulku dailydata, která má zhruba tuto strukturu
id, uploadTime, inverterId, soc, phaservoltage, phasesvoltage, phasetvoltage ...

Do této tabulky ukládám data cca každých 5 sekund a data zobrazuji v grafaně.
Pro účely aktuálního dne je to tak v pořádku. Potřeboval bych na konci dne přesunout
data do archivu, ale s tou podmínkou, aby tam šli pouze data za každých 15 minut,
čili potřebuji tabulku promazat.
Zkopírovat tabulku umím, ale nejde mi vytvořit podmínka na promazání záznamů

V tabulce je uloženo např.
id    uploadTime                inverterId    soc    phaservoltage    phasesvoltage    phasetvoltage
1     2024-07-11 00:00:03            1         86     230.16               236.84              267.1
2     2024-07-11 00:00:08            2         86     230.16               236.84              267.1
3     2024-07-11 00:00:13            1         86     230.16               236.84              267.1
4     2024-07-11 00:01:00            1         86     230.16               236.84              267.1
5     2024-07-11 00:01:00            2         86     230.16               236.84              267.1
...

99    2024-07-11 05:23:01            1         72     230.16               236.84              267.1
100   2024-07-11 05:23:04           2         70     230.16               236.84              267.1


a já bych potřeboval něco takového:
id    uploadTime                inverterId    soc    phaservoltage    phasesvoltage    phasetvoltage
1     2024-07-11 00:00:03            1         86     230.16               236.84              267.1
2     2024-07-11 00:00:08            2         86     230.16               236.84              267.1
3     2024-07-11 00:15:13            1         86     230.16               236.84              267.1
4     2024-07-11 00:15:13            2         86     230.16               236.84              267.1
5     2024-07-11 00:30:00            1         86     230.16               236.84              267.1
6     2024-07-11 00:30:00            2         86     230.16               236.84              267.1

Děkuji
Kajman
Profil
Máte verzi mysql serveru podporující window funkce?

Edit: a nebude jednodušší to ukládat do dvou tabulek a jen promazávat detailní? Nebo v archivní chcete spočítat i minimum, maximum a průměr z těch podrobných dat pro nastavené časové okno?
wajta
Profil *
Kajman:
Mám verzi 8.0.37, takže asi ano.
Zatím to dělám tak, že ukládám do dvou tabulek, ta první obsahuje denní data po 5s, druhá (archivní) po 15 min, ale zdá se mi to takové humpolácké řešení, byť to funguje.
Kajman
Profil
Pokud si prvně vyzobnete data z denní do archivní, ověříte si výsledek insertu, že neselhal, tak pak můžete denní promazat jen dle uploadTime.

Pokud mají být kandidáti do archivu ty záznamy, které jsou pro každé inverterID ve čvrthodině první, tak je lze získat např. takto.
SELECT * -- tady si v připadě insertu vyjmenujete jen chtěné sloupce
FROM   (SELECT d.*,
               Row_number()
                 OVER(
                   PARTITION BY Floor(Unix_timestamp(uploadtime)/(15*60)),
                                inverterid
                   ORDER BY uploadtime) poradi
        FROM   dailydata d
        WHERE  d.uploadtime BETWEEN '2024-07-11' AND '2024-07-11 23:59:59') x
WHERE  poradi = 1; 

Ale tím ztratíte informace o případných anomáliích, které nejsou první ve čvrthodině. Proto si zvažte, zda nechcte dělat obyčejné group by dle té čtvrthodiny a spočítat tam mim, max a avg.

V některých případech, kdy se hodnoty nemění, může být graf sejný, pokud smažete záznam, u kterého je předešlá i následující hodnota naprosto stejná. Necháte si tak pro grafanu jen zuby, kdy se něco změnilo.
wajta
Profil *
Moc díky, vyzkouším.

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:

0