Autor | Zpráva | ||
---|---|---|---|
wajta Profil * |
#1 · Zasláno: 11. 7. 2024, 12:12:22
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 * |
#3 · Zasláno: 12. 7. 2024, 08:11:07
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 |
#4 · Zasláno: 12. 7. 2024, 09:19:17
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 * |
#5 · Zasláno: 12. 7. 2024, 11:57:48
Moc díky, vyzkouším.
|
||
Časová prodleva: 2 měsíce
|
0