Hirdetés
Új hozzászólás Aktív témák
-
nyunyu
félisten
válasz
bambano #5899 üzenetére
Oracleben gyorsan összedobva:
with munkanap as (
select a.*
from (
select to_date('2023-12-31','yyyy-mm-dd') + rownum as actdate, to_char(to_date('2022-12-31','yyyy-mm-dd') + rownum, 'd') as dateid
from (
select rownum r
from dual
connect by rownum <= 5000)
) a
left join days d
on d.actdate = a.actdate
and d.dateid = 0
where a.dateid in (1,2,3,4,5)
and d.actdate is null)
select actdate
from (
select m.*, row_number() over (order by actdate asc) rn
from munkanap m
where m.actdate > to_date('2024-12-20','yyyy-mm-dd')) x
where rn = 15;Ahogy néztem reggel, Postgre szintaxissal sokkal egyszerűbb lenne a munkanap CTE.
-
-
bambano
titán
"A számítógépet logikus dolgokra lehet programozni. Előre nem ismerhető szeszélyek meghatározására nem alkalmas.": próbáljunk meg az sql témakörben maradni.
Az algoritmus abszolút egyszerű: van egy tábla az adatbázisban, ahova a főnök beírja azokat a napokat, amikor valamiért nem az alapértelmezett nyitvatartás van. Ezt törvény szerint 60 nappal előre kell megoldani, tehát nem mindig írják bele egy évre előre. A szabály annyi, hogy ha ebben a táblában van az adott dátumra rendkívüli nyitvatartás bejegyezve, akkor az nem munkanap. Minek bonyolítsam. Amikor naptár szerint hétfő-péntek munkanap és nincs rekord arra a dátumra, az munkanap.
-
nyunyu
félisten
Van lekérdezési rekord limit. Elég csak a munkanapokat egyesével bejegyezni a hr oldal alapján, aztán X1 dátumtól kezdve kérni X2 (vagy X2+1) rekordot, és a legutolsóból kivenni a dátumot. És arra még azt se mondhatja senki, hogy kinézetre csúnya.
Ezért tettem a belső selectbe a row_number()-t, hogy számozza be a találatokat, aztán a külső selectbe meg az rn = 15 feltételt.
Felesleges az egész naptárat visszaadni a frontendnek, ha úgyis csak 1 dátumra van szüksége belőle. -
nyunyu
félisten
válasz
bambano #5892 üzenetére
Ja, ha multikulti környezetben akarod ezt használni, akkor kell még egy oszlop a days táblába, ahova felveszed az országot/tartományt, aztán a függvénybe/querybe azt a feltételt is beleteszed, hogy melyik ország/tartomány munkanapjait számolja.
De akkor lehet szívni az olyan különbségekkel, mint pl. araboknál péntek-szombat a hétvége, tehát arab országoknál a vasárnap lesz az 1, csütörtök az 5 a táblában.
Meg külön-külön összevadászni+felvinni a helyi ünnepeket... -
coco2
őstag
Aludtam rá egyet, és leesett, hogy tényleg ostoba vagyok
Felesleges annyit előre gyorsítani. Van lekérdezési rekord limit. Elég csak a munkanapokat egyesével bejegyezni a hr oldal alapján, aztán X1 dátumtól kezdve kérni X2 (vagy X2+1) rekordot, és a legutolsóból kivenni a dátumot. És arra még azt se mondhatja senki, hogy kinézetre csúnya.
@bambano
>Szerk: nem csak az a nap marad ki, amit a hr portálon közölnek. Az is kimarad, ami helyi okokból nem munkanap vagy nem teljesértékű munkanap. Pl. egy rakás cégnél karácsony és szilveszter között takarékon vannak.
A számítógépet logikus dolgokra lehet programozni. Előre nem ismerhető szeszélyek meghatározására nem alkalmas.
-
bambano
titán
"Ha adatkezeléssel foglalkozol, nem baj, ha nem akadsz ki azon, hogy gyártani kell pár táblát, amit fel is kell töltened.": ha adatkezeléssel foglalkozol, nem baj, ha nem csinálsz felesleges munkát magadnak.
2. Ha adatkezeléssel foglalkozol, akkor a redundáns adattárolástól üvöltve menekülsz.
Szerk: nem csak az a nap marad ki, amit a hr portálon közölnek. Az is kimarad, ami helyi okokból nem munkanap vagy nem teljesértékű munkanap. Pl. egy rakás cégnél karácsony és szilveszter között takarékon vannak.
-
nyunyu
félisten
Ne bonyolítsuk ennyire túl, hogy korrekciós tábla, meg json parseolás.
Munkanap tábla karbantartása az max 1 óra/év.
Legalábbis annyi idő alatt dobtam össze DBFiddlében, úgy, hogy ágyban a hasamon a laptoppal pötyögök 2 ujjal, és gugliznom kellett a postgre szintaxisát.
Mondjuk arra nem jövök rá, mi a baja a határidő függvényemmel, mert a fordításkori hibaüzenet nem túl beszédes, de biztosan valami triviális szintaxist néztem be, csak Oraclehoz szokott szemmel nem tűnik fel.
-
coco2
őstag
válasz
bambano #5882 üzenetére
>Nem elég egyszer feltölteni, mert az, hogy mi munkanap, folyamatosan változhat.
HR portálon előző év végén már ott a lista következő évre. Elvileg nem kellene túl nagy ügynek lennie, hogy írsz egy függvényt, aminek tömbösen behajigálod azokat az adatokat, és az legyártja neked a korrekciós táblát. Évente 1x kicsi manuális pepecselés, de ha ennyitől kizökkensz, add ki diákmunka cégeknek
Eltérő ünnepnap halmozódások.
Ha jól értettem, hosszú határidők vannak, és menet közben több ünnepnap, hétvége, olyasmi tud közbe jönni, és az a problémád, hogy olyankor eltérő korrekció kell. Nos, ha legalább a határidők folyton azonos hosszúságúak, az induló napból egy korrekciós tábla meg tudja neked adni a határidő lejártát. Mert azt előre kiszámolod. Ha eltérő határidők léteznek, mint 8,15,23,32 nap és társai, részint csinálhatsz minden határidő típusra külön táblát, részint csinálhatod azt, hogy tábla elemek helyére egy json stringet raksz be, ami attól a naptól kezdve az összes határidő típusra ad egy kimenetet, és a string lekérdezése után a json-t parsingolod, aztán felhasználod. A json belefér 1 táblába, de kissé N1NF. Ha szebben akarod, az több tábla lesz, és az lesz "csúnyább"
Ha adatkezeléssel foglalkozol, nem baj, ha nem akadsz ki azon, hogy gyártani kell pár táblát, amit fel is kell töltened. Vagy ha annyitól kiakadsz, és látni sem bírod az adatkezelést, inkább bízd azt a részét másra. Amit nem látsz, az nem fáj
-
nyunyu
félisten
válasz
bambano #5883 üzenetére
x. munkanap:
select actdate
from (
select d.actdate, row_number() over (order by actdate asc) rn
from days d
where d.actdate > to_date('2024-12-20','yyyy-mm-dd')
and d.dateid in (1,2,3,4,5) --munkanap
)
where rn = 15;
-- 2025-01-17 00:00:00(actdate a dátum mező, dateid-ben van tárolva az 1-7 hétfő-vasárnap, 0 ünnep)
-
bambano
titán
akkor fejlesztenetek kell
szerintem ez sem jó.
például idén dec. 20-án ki akarok adni egy 15 napos határidőt, kijön január 4, szombat, lépek tovább, január 6. hétfő az első munkanap.
Csak közben volt egy 6 napos karácsony meg egy szilveszter, és ez így pont 4 munkanap lesz. -
bambano
titán
válasz
#79484416 #5880 üzenetére
Melyik határidőt? Ez így azért nem jó, mert az, hogy egy határidős nap esetén mennyi a korrekció, függ attól, hogy előtte mikor mennyi munkanap volt. Tehát ha pl. pünkösd hétfő jön ki, akkor attól függően, hogy húsvét előtt vagy után kérdeztem le, más korrekció kell.
Nem elég egyszer feltölteni, mert az, hogy mi munkanap, folyamatosan változhat.
-
nyunyu
félisten
válasz
bambano #5877 üzenetére
Nálunk ez úgy van megoldva, hogy van egy days tábla, amibe kolléga minden decemberben feltölti előre a következő évi dátumokat, meg mellé, hogy hanyadik napja a hétnek.
Ha valami ünnepnap, akkor 1-7 helyett 8 értéke van, ha meg munkanap áthelyezéses szombat, akkor 5 (péntek) lesz az értékeEzt használva az x. napot követő első munkanap lekérdezés úgy alakulna, hogy megnézed, hogy a kérdéses dátum+x. nap után melyik a legkisebb olyan nap, aminek 1-5 közötti az értéke.
Ha meg x. munkanap kell, akkor a kérdéses dátumnál nagyobbak közül sorbarakod az 1-5 közötti értékűeket, aztán ebből veszed az x. legkisebbet.
-
coco2
őstag
válasz
bambano #5877 üzenetére
Szerintem azt a táblát ügyesebben is használhatnád. Előre gyárthatnál egy intervallum listát dátum tól-ig, amikhez bejegyzed, hogy abban az intervallumban az eredeti határidőt X-re át kell írnod (tovább tolod). Ha nem találtál olyan tábla sort, marad a régi. Ha akár perc pontosan akarsz számolni, akkor naponta egy sor, ami éves viszonylatban még mindig csak 365 sor. Nem a világ vége.
>valaki akar egy ilyen sql lekérdezésen agyalni?
A lekérdezést nem írom meg helyetted, a lusta mindenit
>előre is kösz.
you welcome
-
bambano
titán
Következőn agyalok: leveleket írok. A levelekben van egy csomó határidő, 8 nap, 15 nap, stb. Jobb lenne az X nap határidő helyett konkrét dátumot írni. Szabály szerint hétvégén és ünnepnapon csúszik a határidő. Van egy táblám (én mindig postgresql
) :
id: bigserial, datum: date, stb...
Ha egy nap hétfő,...,péntek, ÉS nincs benne a táblában, akkor munkanap.tehát konkrét dátumhoz és nap darabszámhoz kellene a dátum, ami annyi munkanappal később van.
valaki akar egy ilyen sql lekérdezésen agyalni?
előre is kösz. -
nyunyu
félisten
Jobban végignéztem a query elejét.
Egyszer a select által visszaadott oszloplistában létrehozol egy bank meg egy penztar oszlop aliast
Lejjebb meg hivatkozol egy bank meg egy penztar nevű táblára, amiket elneveztél t2 meg t4-nek.Nem szerencsés egy queryn belül ugyanolyan aliast definiálni, mint amilyen táblát/aliast használsz máshol.
-
nyunyu
félisten
válasz
DeFranco #5869 üzenetére
Nem fordítva írod?
select * from T1
left join T2 on T1.azon=T2.azon
ami az egyenlet bal oldalán van (T1) abból minden és T2-ből az egyező.Elvileg a kettő ekvivalens, aztán onnantól kódolási stílus kérdése/hitvita, hogy azt a táblát írjuk előre, amelyiket akarjuk joinolni (T2) a korábbiakhoz (T1), vagy amelyikhez joinoljuk (T1) az újat (T2)
Amit benézhetett az az, hogy az SQL-92 szabvány előtti Oracle join szintaxisban a Where mögött explicite jelölni kellett, hogy melyik oldalnál megengedett a null, és ha arra az aliasra voltak extra feltételek, akkor ott is:
FROM kimszamla AS t1, banklista AS t2, bank AS t3
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-01-01'
AND t2.szamla_id (+) = t1.szamla_id
AND t3.bank_id (+) = t2.bank_id
AND t3.datum (+) <= '2023-01-01'(Tradícionálisan itt írták előre a régi táblát aztán az egyelőség után az újat a (+)-szal, az jelölte a left joint, fenti példában right joinnak látszik.)
-
nyunyu
félisten
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-01-01'
AND t3.datum <= '2023-01-01'Wherehez írt feltételek erős szűrési feltételek.
Ha nincs t3-ból találat, akkor a t3.datum <='2023-01-01' ki fogja szűrni az egész t1 sorát, mintha erős join lenne.Próbáld meg áttenni a left joinolt táblákra vonatkozó feltételeket a left join ON-ja után:
LEFT JOIN bank AS t3 ON t3.bank_id=t2.bank_id AND t3.datum <= '2023-01-01'
Where mögött csak az eredeti táblára, és hozzá erősen joinoltakra vonatkozó feltételek maradjanak.
-
pch
senior tag
Most már ennyire átírtam, hogy a pénztár s bank táblákat összejoin-oltam és azt tettem left joinba. De az eredmény ugyanaz..
SELECT t1.szamla_id, t1.vevo_id, t1.vnev, t1.brutto, (ROUND(IFNULL((SUM(t2.bevetel)-(t2.kiadas)),0),2)+ROUND(IFNULL((SUM(t4.bevetel)-(t4.kiadas)),0),2)) as fizetve
FROM kimszamla AS t1
LEFT JOIN (banklista AS t2,bank AS t3) ON (t1.szamla_id=t2.szamla_id AND t2.bank_id=t3.bank_id)
LEFT JOIN (penztarlista AS t4,penztar AS t5) ON (t1.szamla_id=t4.szamla_id AND t4.penztar_id=t5.penztar_id)
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-12-01'
AND t3.datum <= '2023-12-01'
AND t5.datum <= '2023-12-01'
AND t2.kivezetes = 'V_SZ'
AND t4.kivezetes = 'V_SZ'
GROUP BY t1.vevo_id;Mintha lesz@rna left join vagy right join van inner join lenne. Az eredmény mindig ugyanaz
-
DeFranco
nagyúr
Nem fordítva írod?
select * from T1
left join T2 on T1.azon=T2.azonami az egyenlet bal oldalán van (T1) abból minden és T2-ből az egyező.
ha
left join T2 on T2.azon=T1.azon
akkor minden T2-ből és T1-ből ami egyező
tehát nem mindegy mi van az egyenlet bal oldalán, az lesz a "minden"
-
pch
senior tag
LEFT JOIN nem működik a mariadb-nél, vagy én nézek be valamit?
Szóval 5 táblából kell összevadászni az adatokat.
Van a számlák tábla, benne a számla ID-vel, a partner ID-vel, partnernév, bruttó.
Van a bank tábla, ebben a bank id és dátuma most a releváns.
Van a bank tétel, ebben a bank id, brutto, szamla id az érdekes.
Van a pénztár tábla. itt pénztar id és dátum kell.
Van a pénztár tétel, ebben a pénztár id és számla id kell.Kellenek azok a számlák amik a megadott nap és előtte nem lettek fizetve.
Amivel próbálkoztam:SELECT t1.szamla_id, t1.vevo_id, t1.vnev, t1.brutto, ROUND(IFNULL((SUM(t2.bevetel)-(t2.kiadas)),0),2) AS bank, ROUND(IFNULL((SUM(t4.bevetel)-(t4.kiadas)),0),2) AS penztar
FROM kimszamla AS t1
LEFT JOIN banklista AS t2 ON t2.szamla_id=t1.szamla_id
LEFT JOIN bank AS t3 ON t3.bank_id=t2.bank_id
LEFT JOIN penztarlista AS t4 ON t4.szamla_id=t1.szamla_id
LEFT JOIN penztar AS t5 ON t5.penztar_id=t4.penztar_id
WHERE t1.tipus='0'
AND t1.teljesites <= '2023-01-01'
AND t3.datum <= '2023-01-01'
AND t5.datum <= '2023-01-01'
AND t2.kivezetes = 'V_SZ'
AND t4.kivezetes = 'V_SZ'
AND bank+penztar<>brutto
GROUP BY t1.szamla_id
ORDER BY t1.vevo_id ASCViszont csak 2 partnert gyűjt ki. Amik nincsenek benne a pénztár/bank táblába azokat nem.
A left join-nak nem az a lényege, hogy az induló táblából az összes adat ott legyen? -
nyunyu
félisten
create view v_ajandek as
select tetel, sum(netto) sum_netto, sum(brutto) sum_brutto
from dbo.Ajandek
group by tetel;Lényeg az, hogy minden a group by-ban nem megadott oszlopra valamilyen aggregáló függvényt (min, max, count, sum, avg...) kell használni, esetedben mindkét oszlopra külön-külön szummázol.
-
Lokids
addikt
Sziasztok!
Egy kis segítséget szeretnék kérni.
Van egy tábla dbo.Ajandek néven
Benne sok oszlop.
De ebből nekem ami lényeg, az a tétel, netto, brutto
Minden tétel 2 tipusból áll, így 2 rekordot rögzít.
1 200 250
1 100 125
2 500 600
2 50 75És így tovább. Létre akarok hozni egy nézetet, amiben ezek egyesítve vannak tételenként 1 sorba. Azt mivel tudom megadni? SUM-al 2 oszlop értékét tudom összeadni, de mi adja össze soronként, ha az ID egyezik?
-
Mike
veterán
éppen most ért el engem is az a kérdés, hogy updatelek valamit, ha a subquery több soros
a stacken sem találtam egyszerű megoldást, szerencsére van korábban megírt sql query gyűjteményem, és abban találtam az IN-t (hülyülök el, tudom)UPDATE vmi
SET
a = 1
WHERE id IN
(SELECT id...
-
tm5
tag
Nem nagyon használom én se, csak van néhány kollégám akik rá vannak függve.
És igen ha ilyen kell akkor én is a MERGE-öt szoktam. Csak akkor amikor ez a kérdés felpattant pont egy ilyen csináltunk a melóban.Ha már veszélyesen élés akkor, hadd említsem az Updateable viewk tömkelegét INSTEAD OF triggerekkel. A fél ház (WS backend) ezen lóg.
-
nyunyu
félisten
Van ilyen update szintaxis? *
Szerettek veszélyesen élni.Én inkább szabvány merge-et írnék:
MERGE INTO Tabla t
USING (SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITION BY ceg ORDER BY datum DESC) rnum
FROM Tabla) x
ON (t.ceg = x.ceg
AND t.adoszam = x.adoszam
AND t.datum = x.datum)
WHEN MATCHED THEN
UPDATE SET t.Rel = CASE WHEN x.rnum = 1 THEN 1 ELSE 0 END;(Gondolom a régebbi adószámokat egyúttal rel=0-ra kell állítani.)
* Ja tényleg, SQL Server 2008 környékén próbálták elcsaklizni a Teradata ügyfeleit, aztán emiatt implementálták a Teradata tuningolt update szintaxisát a FROM clause-zal.
-
tm5
tag
válasz
Jim Tonic #5856 üzenetére
SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1UPDATE T -- nem emlékszem, hogy kell-e ide az alias
SET Ref = 1
FROM Tabla T
JOIN (SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1 ) jo ON T.ceg = jo.ceg AND T.adoszam = jo.adoszam AND t.datum = jo.datum
Némileg egyszerübb lenne a JOIN ha lenne egy ID oszlopa is a táblának. -
Sziasztok!
Segítségetek kérném. TSQL.
Tábla:
Ceg | Adoszam | Datum | RelEgy céghez több adószám tartozik a táblában, de cégenként a legkésőbbi dátumot kellene kiválasztani, és ott Rel értékét 1-re állítani
Köszi. -
Atomgeszi
nagyúr
válasz
#79484416 #5849 üzenetére
Nem kell regisztrálni. Ráadásul a Get your own SQL server egy teljesen más dolog. Ott saját SQL szervert tudok pénzért.. de én nem azt akarom, hanem a lekérdezéseket az ő adatbázisukon tesztelni.
Eleve a hiba leírásában is azt írja, hogy nem supportálja a böngészőm, és nem pedig azt ,hogy nem fizettem elő.
-
Atomgeszi
nagyúr
[https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all] Oldalon nektek megjelenik a Restore Database jobb oldalt?
Bármilyen böngészőben próbálom megnyitni nincs ott a Restore Database, és bármilyen hozzáadással az adatbázisban ezt a hibát dobja:
Error in SQL:Operation must use an updateable query.
Note: Your browser does not support WebSQL, so you are now using a light-version of our Try-SQL Editor, with a read-only Database.
If you use a browser with WebSQL support (Chrome, Safari, or Opera), you can try any SQL statement, and play with the Database as much as you like.
Legújabb Chrome és mégsem jó.WebSQL bővítményre meg nem dob semmit a kiegészítők alatt.
-
-
DeFranco
nagyúr
válasz
#79484416 #5842 üzenetére
technikai oszloppal esetleg, ahol egy nvl(cég,partner) -rel ekvivalens művelettel csinálsz egy oszlopot, és arra csoportosítasz.
nem szép, de azt hiszem működne.
minél többet gondolkodom rajta, annál inkább az az érzésem, hogy adatszervezésileg egyre inkább életszerűtlennek tűnik ez az igény, egy jól szervezett táblázatban ilyen esetnek nem volna szabad előfordulnia.
persze az élet nem az optimális adatszervezésről szól, én meg csak ugatom az sql-t, mert csak selecteket írogatok a munkámhoz, nem ez a szakterületem.
-
Kommy
veterán
Lehetséges olyan lekérdezést létrehozni amit csoportosítanál például cég szerint, de ha nincs megadva cég akkor partner szerint csináljon?
A lényeg az lenne, ha van cég adat akkor az össze alá kerüljön ha nincs akkor sima név alá.
Mert mot ugye így simán cég szerint van csoportosítva, majd pedig partner szerint, de ugye így ha több partner is van adott cégen belül akkor ugye két sor lesz.
-
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. -
pch
senior tag
Nekem jól adja vissza amit írtam...
-
bambano
titán
postgresül így néz ki:
with T as (
SELECT date_part('year',Zeit) as Year,
date_part('month',Zeit) as Month,Zeit, zaehlerstand,
Zaehlerstand-coalesce(
lag(Zaehlerstand) over (order by Zeit),
zaehlerstand) as Consumption
FROM Energy)
select year,month,sum(consumption) from T
group by 1,2 order by 1,2;a problémád az lehet, hogy a lag függvény az első sorra NULL értéket ad, ezért a kivonás nem működik. tehát nem nullát, hanem NULL-t. ezt lehet kikerülni a coalesce függvénnyel.
-
-
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?
-
bambano
titán
lehet az a baj, hogy a group by és a lag sorrendje nem az, ami neked jó.
ezért javaslom a subquery-t. valahogy így:with alselect as (SELECT Month(zeit) as Month,
Zaehlerstand - lag(Zaehlerstand) over (order by zeit) as "Consumption" FROM database.table)
select * from alselect group by
stb. nem ismerem a mysql-t, a pontos szintaxist az olvasóra bízzuk
-
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? -
bambano
titán
ha nekem kellene ezt a problémát megoldani, első nekifutásra biztosan nem sql-lel foglalkoznék, hanem megnézném, hogy van-e erre a Grafana-nak megoldása. Az ilyen grafikonrajzoló cuccok ősének tekinthető mrtg ezt alapból tudta kezelni. emlékeim szerint gauge volt a konfig opció.
-
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áljaDe 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? -
pch
senior tag
Szerintem meg ütközik az sql elvével is.
Ugye egy 1NF kimondja, hogy egy táblába nem lehetnek táblázatértékű oszlopok.
Relációs adatbázis elv.
Szóval ha van egy név adatunk meg egy telefonszám adatunk nem lehetnek egy táblázatba már az első normálformázásnál se. -
bambano
titán
azon agyalok, hogy egyrészt tömbbe érdemes lehet-e összerakni, másrészt stringbe, elválasztó jellel.
a postgresql tud string aggregálást.szerk: #5810
-
Ispy
veterán
válasz
Petya25 #5813 üzenetére
Nos, ez azért van, mert az sql adatbázis kezelő, nem táblázatkezelő. Szóval ezt úgy kell csinálni, hogy összerakod az excelt, ami kiadja a pivotot, diagramot, akármit, a táblázatkezelő meg csak egy 2 dimenziós táblát a nyers adatokkal. Vagy leprogramozod sql oldalon egy tárolt eljárásban. Mindenesetre nem arra használod, amire kitalálták.
Nálunk ez úgy megy, hogy kifzeti a kedves ügyfél a 3-5-10 nap programozást a pivotért, vagy összekattintgatja magának 1 óra alatt, lehet választani, a kényelemnek ára van.
-
nevemfel
senior tag
válasz
Petya25 #5813 üzenetére
Szerintem is jó lenne egy ilyen dinamikus funkció, beépítve az adatbáziskezelőkbe, nagymértékben leegyszerűsíthetné az entity-attribute-value modellre épülő adatbázisok kezelését: [link]
Bizonyára megvan az oka annak, miért nem implementálják ezt. Talán mert összetett, talán mert számos egyéb problémát generál, nem tudom. Mindenesetre mysql alatt egyszerű a helyzet, mert nem tudja a nem dinamikusat sem
, de a példa alapján, tárolt eljárásból kezelve, nem tűnik vészesnek.
Ahol meg sehogy nem lehet megoldani, ott marad az, hogy az alkalmazásszerverben kell implementálni, nem SQL-ben.
-
Petya25
őstag
válasz
nevemfel #5812 üzenetére
köszi a segítséget
Hasonló "összerakom szövegesen a query-t" már csináltam egyszer, tényleg nem egyszerű.
Amúgy elég gáz, hogy egy ilyen (excelben) tök egyszerű dolgot nem lehet 2 sorban megírni MS SQL-ben. Az excel mögött is egy SQL fut le, sor oszlop érték felsorolás lenne az egész.... -
nevemfel
senior tag
válasz
Petya25 #5810 üzenetére
Rákukkantottam a témára, ez a probléma "dynamic pivot" néven kering a neten, elég sokszor kérdezik, és nem triviális a megoldása. Ez talán a legegyszerűbb - legszemléletesebb példa:
Másik probléma magával a PIVOT-tal, hogy mint annyi minden SQL advanced feature, erősen SQL kiszolgálófüggő, hogy hogyan működik, illetve, hogy egyáltalán ismeri-e a PIVOT-ot. Pl. Mysql 5.7-ben biztosan nincs benne.
-
Swarcz
újonc
Sziasztok,
Új munkám van ahol az L1-es feladatok mellé az L2 sokszor visszadobálja az SQL feladatokat rám, az az L1-re.
Soha nem volt közöm ilyen szinten programozáshoz, nincs ellenemre, érdekel a dolog.
A kérdésem az lenne, hogy hogyan érdemes neki kezdeni az alapokhoz? udemy tutorial?Nem akarok mágus lenni, csak megakarom érteni a folyamatokat. A problémám az, hogy zavar, hogy nem tudom mit csinálok, mert az L2 többnyire küldi a scripteket is és nekem csak a megváltoztatni kívánt adatokat kell kicserélnem egy már meglévő scripten. Az SQL adatbázis teljesen lengyelül van, ez még egy nehezítés, mert nem tudok lengyelül, így még inkább fogalmam sincs, hogy mit csinálok.
Köszi előre is mindenkinek! -
Petya25
őstag
Excelben ez két kattintás, a sort behúzod a sorokba, az oszlopot behúzod az oszlopba, a db-ot meg az értékbe.
Egy sima kis táblázat ahol pl nevenként vannak tárgyak felsorolva illetve hogy abból mennyi darab van nála.
ez lenne a cél:
név tárgy1 tárgy2 tárgy3
béla 4 2 5
lajos 0 3 9 -
Petya25
őstag
Már megint egy pivot.... sosem boldogulok vele...
select sor, oszlop, db from tábla
Az hogy hány sor vagy oszlop nem tudom előre, csak a sorokba kellene a sor mező, az oszlopokba az oszlop mező, az érték pedig a db.
Erre valaki? -
gajdi79
csendes tag
Üdvözlet!
Abban kérnék segítséget, hogy használunk egy dobozos ügyviteli programot, ami firebird 2.5 classic 64bit adatbázis kezelővel fut, szerver/kliens módban gigabites hálózaton. A szerveren egy virtuális gép fut egy linux kb. 4GB Rammal, a rendszer/adatbázis kezelő 32 gb. RAMmal fut 10 alatt, i7-6.gen procival. Viszont a Fejlesztők alap firebird konfiggal dolgoznak, esetleg van lehetőség a fb. konfig módosításra, hogy a rendszer stabil maradjon, de eseteleg a program lekérdezések gyorsuljanak?
Köszönöm a segítséget. -
Ispy
veterán
A feladatok a recordset és abból a feladat nevét vizsgálja, a ! azt jelenti, hogy a recordset eleme következik.
-
Lokids
addikt
Sziasztok!
Segítene valaki értelmezni ezt?
IsNull([Feladatok]![Feladat neve])Null a feladatok de nem null a feladat neve?
-
nevemfel
senior tag
válasz
Chrystall #5800 üzenetére
MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.31 (2020-07-13, General Availability)
Security Notes
Incompatible Change: Access to the INFORMATION_SCHEMA.FILES table now requires the PROCESS privilege.
This change affects users of the mysqldump command, which accesses tablespace information in the FILES table, and thus now requires the PROCESS privilege as well. Users who do not need to dump tablespace information can work around this requirement by invoking mysqldump with the --no-tablespaces option. (Bug #30350829)
Új hozzászólás Aktív témák
- Ez már a középkategória: teszten a GeForce RTX 5070
- Xbox Series X|S
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Villanyszerelés
- Milyen okostelefont vegyek?
- Assassin’s Creed Shadows teszt
- E-roller topik
- Kerékpárosok, bringások ide!
- AMD Navi Radeon™ RX 7xxx sorozat
- További aktív témák...
- Bomba ár! Dell 17-7779 2in1 - i7-7G I 16GB I 512SSD I 17,3" Touch I Nvidia I HDMI I Cam I W11 I Gar
- BESZÁMÍTÁS ÚJ 7800X3D 200e / 9800X3D 235e / RTX 4070 280e / 4070 S 340e / 4070Ti S 420e / készletről
- BESZÁMÍTÁS! Gigabyte B760M i5 13600KF 32GB DDR4 1TB SSD RTX 3070 8GB CM CMP 510 Corsair 750W
- Csere-Beszámítás! RTX Számítógép játékra! I7 10700 / RTX 3060Ti / 32GB DDR4 / 500GB SSD
- Beszámítás! Lenovo Thinkpad P15 Gen1 15 FHD notebook - i7 10750H 16GB RAM 512GB SSD Quadro T1000 W11
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest