Hirdetés
- GoodSpeed: Te hány éves vagy?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Brogyi: CTEK akkumulátor töltő és másolatai
- Geri Bátyó: Agglegénykonyha 12 – Ecetek és zsiradékok
- gban: Ingyen kellene, de tegnapra
- vrob: Próbálkozás 386 alaplap újraélesztésre
- ldave: New Game Blitz - 2026
- leslieke: leslieke farmerzsebe
- Krumple: [Xpenology] DSM 7.3 telepítése proxmox 9 alatt - GUIval
- Magga: PLEX: multimédia az egész lakásban
Új hozzászólás Aktív témák
-
fjanni
tag
válasz
bambano
#6003
üzenetére
Értem a 3 tábla felépítését és ez a megoldás jónak tűnik. Megoldja azt hogy eltérő időbélyegekkel hogyan lehet összefűzni adatokat.
Az adat összefűzés azért kell mert ipari üzemről van szó ahol gázmérők regisztrálják a fogyasztást főmérők/almérők/mellérendelt mérők struktúrában. Minden időpontban meg kell tudni mondani pl. hogy az almérőkőn mért fogyasztás összege megegyezik-e a főmérőével. De ugyanígy az elektromos mérőknél pl. hogy a napelem általt termelt energia / a hálózatról vásárolt energia / visszatermelés hogyan viszonyul egymáshoz és pl. mennyi az üzem tényleges fogyasztása stb. és mindezeket összesítve órára/napra/hétre hónapra stb. Tehát különböző mérőpontoknál szerzett adatokkal műveleteket kell végezni, ezt pedig csak úgy lehet hogy összerendelem azokat.
Ez azonban egy jelentős struktúra váltás és egy német cégnél ezt nehéz átvinni, de megpróbálom.
Viszont nekem addig is kell egy megoldás és a korábban említett View jó lehet erre. Fogom a tábla adatokat, először is konvertálom az időt a legközelebbi negyed órás időre (00/15/30/45min) beleteszem a mérési pont azonosítóját (MPxxx) is az adat mellé és unionnal összefűzöm őket. Aztán ezt a view-t használom a Grafana Query-kben. -
fjanni
tag
válasz
martonx
#6000
üzenetére
Nem ugyanarra van, minden tábla más mérési pont adatát tárolja, valamelyik gáz fogyasztás és van amelyik villamos energia fogyasztás adatot tárol, és olyan is van ahol villamos teljesítmény adatot tárolnak adott timestamp-hez kötve.
Ha sikerülne elérni hogy újrafejlesszék akkor annak milyennek kellene lennie?
Jelenleg ilyen egy tábla, a tábla neve MP001
Egy másik tábla pedig: MP002

Látható hogy szinte minden táblában más az időbélyeg adat, van ahol rövid időn belül sok adat lett letárolva stb.
Ehelyett mi a jó megoldás?
Az hogy egy táblába írok úgy hogy minden adatnak van egy mérési pont azonosítója?
ID / MP_code / Zeit / Zaehlerstand - itt ügyelni kell arra hogy az időbélyeg adatok egy beírásnál megegyezzenek.
vagy
egy rekordba legyen írva az össze adat egy dátum mellé?
ID / Zeit / MP001 / MP002 / MP003 .... ahány mérési pont van?Ha elfogadják az új formátumok akkor pedig átkonvertáljuk a régi adatokat is ebbe az új formátumba.
-
fjanni
tag
válasz
rum-cajsz
#5994
üzenetére
Jelenleg van kb. 200 tábla, ez talán felmehet max. 500-ra, tehát nem olyan sok tábláról beszélünk.
Negyed óránként történik a szenzorokbol kiolvasás, ez lehet gáz fogyasztás számláló, vagy villamos energia számláló állás, tehát rekord sem lesz olyan sok.
Van még egy olyan gond is hogy nem ugyanabban az időben olvasnak ki minden szenzort, tehát nem 00/15/30/45 a datetime-ban a min értéke. Ez olyan gondot okoz hogy simán nem lehet join-al kapcsolni az adatokat ha pl. számolni akarok velük, hanem külön külön át kell előbb konvertálni a fent említett 15 perces osztásra és utána mehet a Join.
A fentebb javasolt View megoldás jó lehetne olyan szempontból is, hogy abban ezt az átalakítást már meg lehetne tenni, így a View-ből indított Query-k már egyszerűbbek lehetnek. Ezt úgy tenném meg hogy a legközelebbi 15 perces egész értékre tenném át a View-ban az adatot, de ügyelni kellene arra is hogy ha több olvasás is történt akkor is csak egyet használjon fel. Az új mérési pont belépésekor pedig elég lenne azt csak a View-be felvenni.
Értem azt hogy egy táblában kellene lenni az összes szenzor adatnak és minden adatnak legyen egy szenzor azonosítója pl. "MP001". De azt hogyan javasoljátok megtenni? Tehát lineárisan, azaz Union-al egymáshoz fűzni őket, vagy mátrix szerűen, egy rekordba összefűzni az összes adatot ami egy időponthoz tartozik? Ez utóbbi esetben Join-al az átkonvertált negyed órás adatokat lehetne felhasználni. Ez utóbbi a felhasználás szempontjából (műveletek végzése, Grafana diagramban megjelenítés) talán jobb lenne, de mivel a szenzor azonosítók lennének a mezőnevek, előre kellene definiálni az összes lehetséges MP mezőt hogy egy új MP esetén ne kelljen adatstruktúrát változtatni. Ez nem túl elegáns megoldás.
A View egyébként mindig a tartalmazza az összes adatot, azaz magától frissül?
Egyedi ID mezőt hogyan tudok ez esetben mellé tenni?Az említett Triggeres módszert nem ismerem, az mennyiben lenne más/jobb?
-
fjanni
tag
válasz
bambano
#5986
üzenetére
Mert szenzorokkal gyűjtünk mérési pontokról adatokat (kb. 200-nál tartunk és folyamatosan bővül) és annak idején úgy lett felépítve az adatstruktúra hogy minden szenzor adata külön táblába megy és minden táblának ugyanaz a szintaktikája (datetime, counter). Ezen nem tudok változtatni.
-
fjanni
tag
Én is valami hasonlóban gondolkodtam.
Mivel ciklust hagyományos értelemben nem lehet kezelni az SQL-ben tudtommal, ezért egy eljárás használata jó megoldás lehet.
Az eljárás törzsébe teszem a mag lekérdezést, CALL -al definiálom a tábla párokat és mindegyiket meghívom. Ha lesz új táblapár akkor azt egyszerűen utánaírom.Tehát valahogy így:
DELIMITER//
CREATE or REPLACE PROCEDURE cyle_sum(IN kiln1 VARCHAR(50), IN kiln2 VARCHAR(50))BEGIN
WITH
Q1 AS (
törzs lekérdezés
FROM adatbázisnév.$kiln1
),
Q2 AS (
törzs lekérdezés
FROM adatbázisnév.$kiln2
)
SELECT *
FROM Q1
JOIN Q2 ....
ENDCALL cycle_sum(tablename1,tablename2)
UNION
CALL cycle_sum(tablename3,tablename4)Ebben több dolog van amiben bizonytalan vagyok:
- lehet-e így hivatkozni a változónévre a magban lévő FROM-ban
- ha össze akarok fűzni eredményeket akkor azt az UNION-al így kell-e megtennem
ez így lefut-e a Grafana-ban -
fjanni
tag
Sziasztok, segítségeteket szeretném kérni.
Hogyan lehet egy SQL lekérdezést úgy elkészíteni hogy a magja csak egyszer szerepeljen, de a From-ban szereplő tábla 6 féle lehet és ezek mindegyikére le kell futnia, úgy hogy az eredmények Union-al legyenek összefűzve.
A magban is van két From, melyeket Join-al fűzök össze (tábla párok).
Azaz van egy lekérdezésem amely két tábla adatait összesíti Join-al (ez működik is, változókban van a tábla pár neve), és ezt szeretném összesen 6 tábla párra automatikusan lefuttatni, az eredményeket pedig Unionnal összefűzni.
Hogyan lehet ezt SQL-ben (MariaDB) megtenni? -
fjanni
tag
válasz
bambano
#5836
üzenetére
Köszi, a sum(consumption) a külső Select-ben segített.
Most már jól működik, összesít és a 12. hónap is megvan.
Márcsak egy gond van, valahogy hiányzik a két hónap közötti adat, azaz a hónap első számlálóállása és az előző hó utolsó számlálóállása közötti adat. Azaz a sum-ban csak azok a különbözetek szerepelnek amelyekben mindkét Zeit ugyanahhoz a hónaphoz tartozik. -
fjanni
tag
Nem a számlálóállásokat kell összeadni, hanem az egyes számlálóállás különbözeteket, ezért kell a LAG függvény.
Zaehlerstand- LAG (Zaehlerstand) over (order by Zeit) as Consumption
Ez viszont már nem fut le valamiért az SQL Fiddle-ben.
Ez a hibaüzenet: DDL and DML statements are not allowed in the query panel for MySQL; only SELECT statements are allowed. Put DDL and DML in the schema panel. -
-
fjanni
tag
válasz
bambano
#5829
üzenetére
Igen, valószínűleg a subquery a megoldás amiatt amit írtál.
Készítettem egy queryt de valamiért hibás:
(
SELECT
Year (zeit) as Year,
Month(zeit) as Month,
Zaehlerstand-lag(Zaehlerstand) over (order by zeit) as "Consumption"
FROM table
) as T
select * FROM T group by Year, MonthMi lehet a gond?
-
fjanni
tag
Ez szerintem nem jó, az időbélyeg a Zeit mezőben van, a sum(zeit) pedig az idő összesíti és nem a számláló különbözeteket.
Úgy érted SELECT YEAR(Zeit) as year, MONTH(Zeit) as month, sum (counterdif) as Consumption from table group by year, month ?
A probléma még mindig az, hogy amikor GROUP BY nélkül futtatom akkor helyesen a 12. hónapra teszi a Counter dif értékeket (amiket összesíteni kell), de ha group-olom, akkor miért teszi ezt az 1. hónaphoz? -
fjanni
tag
Sziasztok, segítséget kérnék.
Adott egy tábla mely 15 perces energia fogyasztás számláló adatokat (kWh) tartalmaz időbélyeggel.
Szeretnék ebből napi/heti/havi/éves fogyasztás adatokat Grafana dashboardon ábrázolni.
Milyen megoldást javasoltok?
Ma a max(counter)-min(counter) függvénnyel számolok Group by Month(Time) feltétellel, akkor nem marad ki az adott hó első counter adata és az előző hó utolsó adata közötti különbség?
Pont ezért próbáltam a LAG függvénnyel minden rekordhoz kiszámolni a változást és ezeket összesíteni
Ez a lekérdezés:
SELECT
Month(zeit) as Month,
Zaehlerstand - lag(Zaehlerstand) over (order by zeit) as "Consumption"
FROM database.table
order by zeit
Ez szépen ki is számolja a különbségeket és az időt hónappá konvertálja
De amikor összesíteni akarom a havi adatokat és beteszem a
Group by Month(Zeit)
sort, akkor a 12 hónapnál semmit nem hoz, hanem az első hónapnál hozza az összesített 12. havi adatot, és mindegyik hó el van csúszva.
Mi lehet a probléma?
Hogyan lehet helyesen napi/heti/havi összesítéseket csinálni az időbélyeg alapján? -
fjanni
tag
Sajnos sem a LAG, sem az EXTRACT függvényt nem ismeri a Mariadb. Egyébként Grafana lekérdezésben használnám, ahol csak azokat a mezőket kellene a selectbe betenni amit ábrázolni is akarok. Azaz ez esetben két adat kellene, az időbélyeg (ami megvan - time) és a számított eltérés az előző rekordhoz képest (a jelenlegi és az előző óraállás különbözete)
-
fjanni
tag
Kösz a segítséget, de ez nekem egy kicsit bonyolult, egyszerűbb megoldás nincsen?
Tulajdonképpen nem kell új tábla, csak egy Select ami a táblában lévő adatok mellé kiszámolja az utolsó két oszlopot. Az első három oszlop van a táblában.
Ha a deltaT és deltaC megvan akkor már Group by-al tudok periódusokra összegezni, csak azt nem tudom kiszámolni hogy mennyi a növekmény.
-
fjanni
tag
Sziasztok, kis segítséget kérnék. Adott egy tábla egy adatbázisban ahol szenzor adatokat tárolunk. Minden percben rögzíti egy gázfogyasztásmérő aktuális állását. Tehát van benne egy idő adat és egy szám adat ami folyamatosan növekszik.
Hogyan lehet egy olyan SQL lekérdezést írni, hogy számolja ki a változást a két adat között, tehát az aktális értékből vonja ki az előzőt és így megkapjuk az aktuális fogyasztást. A másik kérdés továbbmenve hogy napi/heti fogyasztás értéket hogyan kaphatok, vagy esetlég két adott időpont közöttit.
Új hozzászólás Aktív témák
- BESZÁMÍTÁS! ASUS H510M i5 11500 16GB DDR4 512GB SSD RX 7600 8GB Zalman T4 Plus be quiet! 600W
- BESZÁMÍTÁS! MSI B450M R5 5600X 32GB DDR4 512GB SSD RTX 3070 Ti 8GB Zalman S2 TG GIGABYTE 750W
- Akció! Gamer PC-Számítógép! Intel Ultra 5 245K / RTX 3080 10GB / 16GB DDR5 / 1TB SSD!
- LG 27GP95RP - 27" Nano IPS - UHD 4K - 160Hz 1ms - NVIDIA G-Sync - FreeSync Premium PRO - HDR 600
- GYÖNYÖRŰ iPhone 12 Mini 128GB Green-1 ÉV GARANCIA -Kártyafüggetlen, MS4169, 100% Akksi
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest







