- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
Jim74
nagyúr
"Valóban a mérő azonosító karaktereiben lehet betű is.": majd valami agyhalott kitalálja, hogy legyen benne ékezetes betű, pl. tulaj neve vagy címe rövidítve, esetleg bugos utf8 konverter az adatbáziskezelőben (mint ma a debianban...
) és akkor lefekszik az egész....Egyébként a számmal is az a gond, hogyha nem tudod a határait, nem biztos, hogy találsz hozzá természetes adattípust. Akkor eltárolod stringként, és vége. Vagy jöhet olyan történet is, mint egyszeri lakcímnél, hogy beépítenek egy telket, és hirtelen a természetes szám házszámból lesz egy /b.
Soha nem tudhatod, hogy egy architect miket képes elbarkácsolni
Kollégám mondása: az ügyintézői találékonyság határtalan.
-
Jim74
nagyúr
Én is közüzemi cég szerűséget találgatok...
Szerintem a mérőket ki kell venni, mert stringek között keresni rosszabb, mint egész számok között, másrészt nem tudni, melyik mérő neve milyen hosszú.Archiváláson valóban érdemes gondolkodni, de a kötelező megőrzési idő, szerintem, elég nagy ahhoz, hogy archiválástól függetlenül meg lehet borítani a lekérdezéseket. Ha a jelentési teljesítmény nem jó, akkor nem jól tervezték meg az adatbázist.
Egyébként a nagy tábla a biztonsági mentéseket borítja meg leghamarabb...
Valóban a mérő azonosító karaktereiben lehet betű is. Áramban vagyok otthon, ott eddig csak számmal találkoztam, de simán bejöhet olyan gyártó, aki betűt is elkezd alkalmazni az azonosítóban.
A többi hasznos infót is köszönöm
. -
Jim74
nagyúr
Én úgy értettem abból, amit írt, hogy össze akarja kötni az azonos időben különböző mérőkkel mért értékeket, és ezt nem lehet időbélyeg alapján, mert az mindig változik.
Tehát ha valamiféle egységben (gazdasági egység, megrendelő, számlázási egység) több mérő van, tudni akarja az egy időpontban mért értékeket. Találgatás: például nálam 5 hőmennyiség mérő van, ha simán leszeded a mért értékeket, különbözik az időpont, de bizonyos célokra tudni kell, hogy amikor az egyik mért valamit, pontosan akkor mit mért a másik.Nekem az a gyanúm, hogy valami olyan feladatról lehet szó, mint egy közüzemi cégnél, hogy jönnek a mérőkről az adatok és két adott időpont között ki kell számolni az adott időszakban elfogyasztott (mért) mennyiséget.
Szerintem ehhez elegendő egy tábla (feltéve, ha a mérőkről nem szükséges további információ, pl. telepítési hely, lokáció, hitelesítési év, ilyesmi).
Viszont az adatok mennyiségétől függően már most érdemes elgondolkodni az időközönkénti archiváláson, mert egy ilyen tábla elképesztő nagyra tud "hízni", ami az esetleges riportolási performanciát megboríthatja.
Én nem vagyok data enginieer, csak egy mezei riportingos, ezért az irományomat ilyen kritikus szemmel nézd kérlek
. -
Jim74
nagyúr
-
Jim74
nagyúr
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?
Hasonló témához periférikusan közöm van. Egy táblába jönnek különböző mérők adatait és az időben egymást követő, de azonos mérő azonosítóhoz tartozó adatok egy növekvő sorszámmal vannak ellátva hasonlóan, ahogy Bambano is írta.
Ha egy lokáción lecerélik a mérőt, akkor az új mérő azonosítóval újra indul a sorszámozás. Nálunk csak dátum pontosságal jönnek az adatok, de így is kezelhetetlen lenne az egész, ha mérőnként lenne egy-egy tábla.
Nem én találtam ki, hogy így legyen, én csak felhasználója vagyok az adatoknak. -
Jim74
nagyúr
Ezt biztosan nem csinálnám, mert ebből orbitális katyvasz lesz a végén.
Ha mindenáron ilyen elhibázott adatszerkezetet kell csinálni, akkor valami szabályrendszert csinálnék (fogalmam sincs, hogy a mariadb vagy a mysql tud-e ilyet, a postgresql tud), hogy ha insert történik az egyedi táblába, akkor párhuzamosan legyen egy insert az összesített táblába is. Ekkor normális adatbáziskezelő egy tranzakción belül elvégzi a két insertet és van rá reális esély, hogy nem szalad szét a két tábla.Továbbra is erőltetném azt az alapelvet, hogy adatbáziskezelésnél a redundancia rossz, menekülünk tőle, mint ördög a tömjénfüsttől.
Akkor én valamit félreértettem a feladatnál.
-
Jim74
nagyúr
Akkor kell írni egy tárolt eljárást, ami a szenzorokból érkező adatokat kiegészíti egy szenzor azonosítóval és egy táblába insert-álja bizonyos időközőnként az összes szenzor adatait. A duplikált betöltés érdekében a datetime, counter, sensorid mezők összevonásával képeztek egy egyedi azonosítót, amire vizsgáltok betöltéskor, hogy ugyannak a szenzornak ugyanazon adata ne töltősldhessen be többször.
Ha új szenzor kerül a rendszerbe, akkor csak ezen töltő eljárást kell kiegészíteni az új szenzor táblájával és id-jával.
Így egy táblában lesz historikusan az összes szenzor adata és csak a töltést kell időzíteni automatikus futásra. -
Jim74
nagyúr
A problémám az, hogy a kapott adatot nem én tárolom le, hanem az SAP kapott hozzáférést a táblához és ők töltik fel.
Én már csak a feltöltött táblához férek hozzá.
Így nem tudok konverziót végezni. De megpróbálom rávenni a küldő oldalt, hogy ezt tegyék meg. Nekik semmiből sem tartana ezt is beleírni még.Köszönöm a segítséget mindenkinek!
A SAP-ból szerintem nem fogjátok tudni máshogy kinyerni, de nem vagyok 100%-ig biztos benne. Nálunk szerencsére file-okat pakolnak le és mi töltjük be SQL adatbázisba, így már a betöltő tárolt eljárásban elvégezzük a szükséges transzformációkat.
Egyébként a feltöltést követően csak egy plusz update sort kellene futtatniuk, ami az összeg mezőn elvégzi a szükséges konverziót.
-
Jim74
nagyúr
Fentebb írták, hogy amikor lekérdezésnél hivatkozol a mezőre, akkor pontot cseréld semmire, a vesszőt pedig pontra, utána már tudod használni a decimalt.
select cast(replace(replace(szám, '.', ''), ',' , '.') as decimal(8,2))
Ha elb...tam a szintaxist, akkor sorry, csak már alig látok.
Tárolod is a kapott adatokat? Ha igen, akkor az átalakítást érdemes a letároláskor elvégezni, hogy a későbbiekben a lekérdezésnél ne kelljen átalakítani, így az gyorsabban fog futni.
Én is szoktam szívni ezzel SAP-ból kapott adatoknál, főleg ha EUR és HUF vegyesen van...
-
Jim74
nagyúr
Szerintem jobban jársz, ha decimal előtt megfelelő formátumra hozod az adatot.
A forrást sokszor nehéz rávenni, hogy módosítson. Nem SAP-ból jön az adat véletlenül? -
Jim74
nagyúr
Jim74 válaszát kiegészítve, hogy a példádat adja ki:
select t1.NAME,
coalesce(t2.Created_date, 'NINCS') Created_date,
coalesce(t3.Description,'NINCS') Description
from tabla_1 t1
left join tabla_2 t2
on t2.ID = t1.ID
left join tabla_3 t3
on t3.ID = t2.ID2
where t1.NAME in ('A','B','C','D','E','F','G')
order by t1.NAME;(Eredetileg nvl()-lel akartam írni, de az Oracle specifikus függvény, ahogy az isnull() SQL Serveres, egyik sem szabvány SQL.
Coalesce() az elvileg szabványos, minden DBben működnie kéne.)Köszi
. Én sajnos csak T-SQL-ben vagyok némileg otthon. -
Jim74
nagyúr
A where-t a végére kell írni. Ez a szintaxis:
select *
from
join
where
order by (ha sorba is akarsz rendezni). -
Jim74
nagyúr
Pontosítok, tabla_1-ből minden jön, a többiből, ahol van találat, de ahol nincs ott is megjelenik a tabla_1 rekordjai, csak a többi táblából megjelenített érték azokon a sorokon NULL érték lesz.
Ha a NULL kiírás nem megfelelő, akkor az ISNULL függvénnyel tudod tetszőleges értékre cserélni.
Pl. ISNULL(t2.Created_date, 'NINCS')
Ekkor, ha a tabla_2-ben nincs tabla_1 ID-hez kapcsolható rekord, akkor a Created_date oszlopban a NULL érték helyett NINCS érték fog megjelenni. -
Jim74
nagyúr
Szia!
Nem ölünk meg senkit, aki nem sql pro
. Azért van a fórum, hogy segítsünk, tapasztalatot osszunk meg. Én is csak a felszínt kapargatom és még élek.
select * from tabla_1 t1
left join tabla_2 t2 on t1.ID = t2.ID
left join tabla_3 t3 on t1.ID = t3.IDBocs a formázásért telefonról vagyok.
Elvileg így minden sor lejön minden táblából és ahol nincs találat, ott NULL értékeket fogsz kapni.
Ha rosszul értelmeztem az igényt, akkor sorry.Természetesen a * helyére az általad megjeleníteni kívánt mezőket írd be.
-
Jim74
nagyúr
Sziasztok,
van egy kérdésem. Megpróbálom egy kis példával szemléltetni, mert leírni nem tudom. Légyszi ne öljetek meg nagyon, nem vagyok nagy SQL mágus, kisebb lekérdezésekkel elboldogulok, és ennyi, de szívesen tanulok

Adott 3 tábla, benne adatok. Lehetnek benne más adatok de azok nem relevánsak.
tabla_1ID NAME1 A2 B3 C4 D5 E6 F7 G8 Htabla_2ID Created_date ID21 2022.01.01 112 2022.01.01 183 2022.01.02 314 2022.01.02 555 2022.01.01 776 2022.01.03 110tabla_3ID Description11 Alma55 Körte77 Szőlő110 Répa
Az adatok amiket le kell kérdezni: A, B, C, D, E, F, GEddig így oldottam meg (tudom ez a fajta join sem a legjobb, de gyors, és hatékony számomra):
select temp2.tempname, temp2.tempid, temp2.id, temp2.id, temp2.created, temp2.id2, t3.DescriptionFROMtabla_3 t3(select temp.name tempname, temp.id tempid, t2.ID id, t2.Created_date created, t2.ID2 id2FROMtabla_2 t2,(select NAME name, ID idFROMtábla3 t3,IDs idswhereids.column1 = tabla_1.name) tempwhretemp.id = t2.id) temp2wheret3.id2 = temp2.id2
A select így lefut (lehet van benne elírás, azért bocs), de csak arra kapok eredményt, ahol mindhárom táblában van találat. Én úgy szeretnék lekérdezést futtatni, hogy ahol nincs eredmény, ott is legyen visszakapott eredményem, mondjuk NINCS, vagy bármi.Pl ilyesmit:
A 2022.01.01 Alma
B 2022.01.01 NINCS
C 2022.01.02 NINCS
D 2022.01.02 Körte
E 2022.01.01 Szőlő
F 2022.01.03 Répa
G NINCS NINCSRemélem érthető amit szeretnék kérdezni, és semmi szentségtörést nem írtam le

Szia!
Nem ölünk meg senkit, aki nem sql pro
. Azért van a fórum, hogy segítsünk, tapasztalatot osszunk meg. Én is csak a felszínt kapargatom és még élek.
select * from tabla_1 t1
left join tabla_2 t2 on t1.ID = t2.ID
left join tabla_3 t3 on t1.ID = t3.IDBocs a formázásért telefonról vagyok.
Elvileg így minden sor lejön minden táblából és ahol nincs találat, ott NULL értékeket fogsz kapni.
Ha rosszul értelmeztem az igényt, akkor sorry. -
Jim74
nagyúr
SELECT *,
ROW_NUMBER() OVER (PARTITION BY OrderNr ORDER BY Part)
FROM jobb_tablaHa kell a megrendelés dátuma is, akkor join-olod a rendelés fej (törzs) táblát a fenti lekérdezésben
-
Jim74
nagyúr
-
Jim74
nagyúr
-
Jim74
nagyúr
Szia!
dbo.getnums táblát visszaadó függvénnyel tudsz 1-től n-ig léptetni.
A másik kérdést kifejtenéd példával, mert ennyiből nem teljesen világos számomra. -
Jim74
nagyúr
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)
Sajnos a Mariadb-t nem ismerem, de egy gyors keresés alapján elvileg ismeri a LAG fügvényt.
[link] -
Jim74
nagyúr
Én Oracle-ben találkoztam vele először. Bár azóta inkább az sql server mellett tettem le a voksom. Szerintem a legtöbb helyen elérhető.
Én úgy szoktam mondani, hogy ha 1-2 alkalommal kell, akkor performancia sokadlagos. Az eredmény legyen jó. De ha már ütemezett feladat lesz belőle, akkor megnézem a végrehajtási tervet és próbálom keresni a költséges pontokat.Ssrs dashboard-oknál szoktuk nézni, hogy a dataset query futásideje max. 5 másodperc legyen, mert afelett a felhasználói élmény már sérül.
Ha több, akkor jön az sql tuning. -
Jim74
nagyúr
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.A napi, heti fogyasztást úgy tudod megoldani, hogy képzel két oszlopot a Time mezőből, az egyikben a napok, a másikban az Év-hetek leszenek (azért nem csak hét, mert több éves adasor esetén a különböző évek ugyanazon heteit nem tudnád megkülönböztetni.
Erre a két oszlopra mar tudod group by-olni a fent kiszámított két Time közötti fogyasztási adatokat.
Ha két időpont között szeretnéd kiszámolni, akkor WHERE feltételben korlátozod az intervallumot. (Where Time between x and y).Nap:
CAST(Time as date) as Datum
Év-hétCONCAT(DATEPART(year, Time), '/' , DATEPART(iso_week, Time)) as Ev_het -
Jim74
nagyúr
LEAD-del pedig a következő sorokra lehet hivatkozni.
Performancia szempontjából nem tudom, hogy a LEAD/LAG vagy a self join a jobb megoldás, mert sosem teszteltem ezt. Ha vakon kellene fogadnom, akkor a LEAD/LAG-re tennék.
Az is igaz, hogy én csak MS SQL-ben dolgozom, nem tudom, hogy máshol léteznek-e ezek a függvények. -
Jim74
nagyúr
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.
A LAG fügvénnyel tudsz hivatkozni előző értékekre
LAG(Counter, 1) OVER (ORDER BY Time)
Ez az adott sor előtt időben eggyel lévő sor Counter értékét adja vissza. Ebből kivonod az aktuális sor Counter értékét és megvan a fogyasztás a két időpont között. Ugyanezt be tudod vetni az időre is csak ott Datediff-et használj a két időpont között eltelt idő kiszámításához. -
Jim74
nagyúr
Köszi
és Apollo17hu Neked is.
Igen ilyen oszlopok vannak. Az a baj, hogy egy meneten belül a fogadások száma eltérő lehet, így nem tudom, hogy hányszor kellene joinolnom, vagy hány extra mezőt kellene képeznem.
Valamilyen windowed function kéne, ami egy kumulatív sum--ot, vagy sorszámozást képezne egy menet belül, ha az egymást követő fogadások nyerőek, de nullát venne fel, amikor jön egy vesztes fogadás és a következő nyerő fogadásnál egyről indul.
Ciklust nem szeretnék írni rá, csak worst case, mert nem igazán hatékony szerintem SQL-ben.
Végső cél, hogy meg tudjam mondani, hogy melyik volt a leghosszabb nyerő szériájú menet.Közben szerintem sikerült megoldanom. Úgy gondolom, hogy ez egy roppant buta és favágó megoldás, de működik. NyV a fogadás eredménye (0, vagy 1). A sorszam pedig a fogadás sorszáma. Azért indul 20-ról mert az a max fogadás mennyiség egy meneten belül.
select menet,
STRING_AGG(Nyv, '') WITHIN GROUP (ORDER BY menet, sorszam) as Nyv_lista
from fogadas_tabla
group by menet
)
select top 1 menet,
case when Nyv_lista like '%11111111111111111111%' then 20
when Nyv_lista like '%1111111111111111111%' then 19
when Nyv_lista like '%111111111111111111%' then 18
when Nyv_lista like '%11111111111111111%' then 17
when Nyv_lista like '%1111111111111111%' then 16
when Nyv_lista like '%111111111111111%' then 15
when Nyv_lista like '%11111111111111%' then 14
when Nyv_lista like '%1111111111111%' then 13
when Nyv_lista like '%111111111111%' then 12
when Nyv_lista like '%11111111111%' then 11
when Nyv_lista like '%1111111111%' then 10
when Nyv_lista like '%111111111%' then 9
when Nyv_lista like '%11111111%' then 8
else 0 end as Nyero_szeria
from lek1
order by case when Nyv_lista like '%11111111111111111111%' then 20
when Nyv_lista like '%1111111111111111111%' then 19
when Nyv_lista like '%111111111111111111%' then 18
when Nyv_lista like '%11111111111111111%' then 17
when Nyv_lista like '%1111111111111111%' then 16
when Nyv_lista like '%111111111111111%' then 15
when Nyv_lista like '%11111111111111%' then 14
when Nyv_lista like '%1111111111111%' then 13
when Nyv_lista like '%111111111111%' then 12
when Nyv_lista like '%11111111111%' then 11
when Nyv_lista like '%1111111111%' then 10
when Nyv_lista like '%111111111%' then 9
when Nyv_lista like '%11111111%' then 8
else 0 end desc -
Jim74
nagyúr
Van egy táblád, amiben van egy menet_id, egy fogadas_id, meg egy nyert mező?
8x összejoinolod önmagával, menet_id = menet_id, következő fogadas_id = előző fogadas_id+1, nyert mindig 1?
select f1.menet_id,
f1.fogadas_id kezdo_fogadas_id
from fogadas f1
join fogadas f2
on f2.menet_id = f1.menet_id
and f2.fogadas_id = f1.fogadas_id + 1
and f2.nyert = 1
join fogadas f3
on f3.menet_id = f1.menet_id
and f3.fogadas_id = f1.fogadas_id + 2
and f3.nyert = 1
join fogadas f4
on f4.menet_id = f1.menet_id
and f4.fogadas_id = f1.fogadas_id + 3
and f4.nyert = 1
join fogadas f5
on f5.menet_id = f1.menet_id
and f5.fogadas_id = f1.fogadas_id + 4
and f5.nyert = 1
...
where f1.nyert = 1;Köszi
és Apollo17hu Neked is.
Igen ilyen oszlopok vannak. Az a baj, hogy egy meneten belül a fogadások száma eltérő lehet, így nem tudom, hogy hányszor kellene joinolnom, vagy hány extra mezőt kellene képeznem.
Valamilyen windowed function kéne, ami egy kumulatív sum--ot, vagy sorszámozást képezne egy menet belül, ha az egymást követő fogadások nyerőek, de nullát venne fel, amikor jön egy vesztes fogadás és a következő nyerő fogadásnál egyről indul.
Ciklust nem szeretnék írni rá, csak worst case, mert nem igazán hatékony szerintem SQL-ben.
Végső cél, hogy meg tudjam mondani, hogy melyik volt a leghosszabb nyerő szériájú menet. -
Jim74
nagyúr
Sziasztok!
Az alábbi "problémára" keresnék megoldást.
Adott egy tábla amiben fogadások vannak. Menetenként több fogadás, melyek kimenetele 1(nyert), vagy 0 vesztett.
Ki kellene listáznom azokat a meneteket, ahol legalább 8 egymást követő fogadás nyerő volt.
Hogy lehetne ezt a legegyszerűbben megoldani?Köszönöm a segítséget
. -
Jim74
nagyúr
-
Jim74
nagyúr
-
Jim74
nagyúr
-
Jim74
nagyúr
És a dátumokban a pontot cseréld ki kötőjelre.
Egyébként ha SSMS-t használsz, akkor a queryben van egy fekete pipa gomb az exec mellett, az leellenőrzi a szintaktikát, hogy rendben van-e.
Illetve először írd meg a lekérdezést sum nélkül, annak gyorsan le kell futnia, de a dátum okozhat gondot, ha nincsen rajta index. Legyilkolni ezzel nehezen fogod a szervert szvsz, vagy akkor futtasd, amikor kevesen használják a programot.
A pont lecserélése kötőjelre gyorsít a lekérdezésen, vagy valami más szerepe van?
Én úgy tudom, hogy ponttal is működik. -
Jim74
nagyúr
Mire gondolsz dátumaritmetikán pontosan?
Azért kérdezem, mert kipróbáltam, hogy varchar típusú oszlopokban tároltam dátumokat és hiba nélkül működött rajta a DATEDIFF.
Erre gondoltam:
create table #tmp (dátum1 varchar(50), dátum2 varchar(50))insert into #tmp (dátum1 , dátum2)values ('2019.11.01', '2019.11.02'),('2019.11.01', '2019.11.03'),('2019.11.01', '2019.11.04')select dátum1, dátum2, datediff(day,dátum1,dátum2) from #tmpHa butaságot kérdeztem, akkor elnézést kérek

-
Jim74
nagyúr
Sziasztok
Kicsit belekavarodtam ebbe az adatbázis tervezésbe
Ha van egy táblám amibe pl zöldségeket tárolok, ehhez el kell tárolnom 2 dátumot kezdő és vég, illetve 2 képet érett és éretlen állapotban, ehhez kell egyáltalán 3 tábla? valamiért úgy csináltam de most hogy gondolkodok lehet felesleges, mert ugye 1az1 kapcsolat lenne köztük
Szia!
A képeknek és a dátumoknak van köze egymáshoz? Arra gondolok, hogy a kezdet az éretlen fénykép, a vég pedig az érett?
Mi a cél?Elvileg lehet 1 táblában is, de kettőben is. Pl, ha kettő, akkor az 1-esben tárolnám a zöldségeket azonosítóval, névvel kezdet, vég dátummal. A másik táblában pedig lenne a zöldségazonosító a képkészítés dátum és a kép. A kettőt a zöldségazonosító és a dátum mezőkkel kapcsolnám össze.
-
Jim74
nagyúr
A date után nem kell valami reláció? Egyenlő pl.?
Oracle-höz nem értek, de T-SQL-ben is hibára futna így.SELECT * FROM TANULO WHERE DATE = '19-AUG. -09';
-
Jim74
nagyúr
Szia,
mi nemrég kerestünk embert, akinek egy SELECT, egy JOIN és egy HAVING feladat volt. Kb. 20-ból 1 ment át. Már ennek is örültünk és fel is vettük

De nem is ez a lényeg. Volt olyan, nem is egy, aki emberileg jónak tűnt. Nekik felajánlottam, hogy tolják le az sqlzoo.net oldalt. 2 hét múlva hívja fel a HR-est és beszéljünk újra. Egyik se volt elég motivált, hogy visszatelefonáljon. Pedig az az oldal nagyon jó az alapokra. Volt egy diákunk, aki üresjárataiban 1,5-2 hét alatt kitolta és tudatosan használta. Ha meg elakadsz, a másik programozói tudást tudod fejleszteni, azaz guglizni kell. Rengeteg fórumon mutatnak megoldást. De azért 5 perc után nem érdemes rákeresni

Igaz ez a standard SQL, nem MySQL, de az alap menjen. Ha az alap betonstabil, akkor azzal is megoldod a legtöbb feladatot.
Kísérletezéshez a W3Shools.com/sql se rossz.
+1 a w3schoolra

Ha meg belejössz és komolyabb problémába ütközöl, akkor stackoverflow oldal. Ami ott nincs fent, nem is létezik

-
Jim74
nagyúr
-
Jim74
nagyúr
szerintem nem jó irányból közelítesz.
ha egy mezőben szöveg is lehet, akkor az nem lehet int. tehát vagy "n/a"::stringet kell visszaadnod, vagy stringgé konvertált számot. tudomásom szerint olyat egyetlen sql adatbáziskezelő se tud, hogy egy oszlop az egyik sorban string, a másikban meg szám.Az adatbázisban int-ek az adatok, de ahol 0 a beérkező hívás, ott nincs értelme megválaszolási arányt számolni, ezért szeretnék az arányszám helyett 'N/A' string-et kiíratni.
Közben sikerült megoldanom

CASE WHEN CAST(app.CallsOffered as INT) = 0 THEN 'N/A'
ELSE CAST(app.CallsAnswered*1.0/CallsOffered as VARCHAR) end as AnswerRateKöszönöm a segítséget

-
Jim74
nagyúr
Sziasztok!
Van egy olyan problémám, hogy egy iif vizsgálatnál, ha a vizsgált mező értéke 0, akkor N/A karaktert szeretnék a cellába íratni, azonban olyan konverziós hibával elszáll a select, konkrétan nem tudja az N/A-t int-té konvertálni. De hát én nem is szeretném. Valószínűleg valami implicit konverzióról van szó, de hirtelen nem tudom a megoldást rá. Remélem valaki már találkozott hasonlóval.
Ez lenne a vizsgálat:
iif(CallsOffered=0,'N/A',CallsAnswered/CalllsOffered) as AnswerRateElőre is köszönöm a segítséget

-
Jim74
nagyúr
-
Jim74
nagyúr
Szia!
Szerintem egy drop table, vagy truncate table utasítást elég nehéz elgépelni a select helyett...

De ahol kritikus az adatvesztés, ott kell lennie biztonsági mentésnek.
-
Jim74
nagyúr
Tisztelt Forum!
En azert jottem ide, hogy informaciot kapjak, es tovabbra is a tenyekre akarok fokuszalni es logikus megoldast keresni.
Ha valaki szakembernek tartja magat, akkor orulnek, ha a logika es realitas alapjan reagalna.
Ami a tablakat illeti, mindenki, aki sertodotten valaszolt, hasonlo megoldast javasolt, mint amin en gondolkodtam.
A lenyeges kulonbseg az, hogy allandoan kezdet-veg datumokra kaptam javaslatokat, ami szerintem nem jo, mert minden datumot csak utolag lehet tenykent kezelni.
Tovabbra is ebben latom a lenyeges kulonbseget, es nagyon nem ertem, hogy amikor a legutobbi javaslatom egy datum+szemely+szervezet alapjan esemeny segedtabla bevezetese volt, miert jonnek folyamatosan tamadasok, hogy szemely+szervezet+kezdodatum+vegdatum kell, amikor egyertelmu, hogy a vegdatum csak feltetelezett, az barmikor valtozhat.
A végdátum mindaddig 9999.12.31,amíg adott személy, adott szervezethez tartozik, ha átigazol, akkor ezen a rekordon kap egy végdátumot, majd egy új rekortban a végdátum +1 nap kezdeti dátummal kerül a másik csapathoz (ha nincs szünet a két csapattagság között). Így egy mérkőzésnél pl. elég csak a mérkőzés dátumát, és a játékosok ID-ját megadni, a fenti törzstáblából már levezethető, hogy melyik csapat mérkőzött egymással.
-
Jim74
nagyúr
Amin most tepelodok, amit Apollo irt, az esemenytabla, mert azt valahogy be kell illeszteni az elemzesbe, a szezonon beluli torteneseknel szakaszolni kell - pl. egyik csapat edzoje a masikhoz igazol, vagy amit korbban irtam, hogy december kozepen lecserelik a csatarsort es "uj csapat" jelenik meg.
Sehogyansenem jutok elobbre, mert egy esemeny tul sok mindent erint.
Elvileg jo lenne indulasnak:
Esemeny tabla
es_id
datum-ido
megnevezes
erintett - es itt bukok el, pl. 3 jatekos atigazol masik csapatba, minimum a 3 jatekost es a 2 csapatot erinti.Elvileg leszukithetek mindent "csapatok" es "szemelyek"-re, es a szemelyeknel van egy leosztas, hogy az illeto az adott idoszakban jatekos, edzo, biro, partjelzo, stb. de akkor is ket csoportom van, es azon belul is tobb erintett lehet.
Eddig jutottam:
Esemeny tabla
esemeny_id
datum-ido
megnevezes
csapat_id
szemely_idHa felveszek egy segedtablat, az megoldas lehet?
segedtabla
esemeny_id
csapat_id
szemely_idNagyon M : N -szeru, nehezen kezelheto megoldasnak tunik:-(
Esetleg a játékosoknak, ha készítesz egy törzstáblát, hogy melyik, mettől meddig tartozik egy csapatboz az segítene?
Rekord_id
Jatekos_id
Jatekos_nev
Csapat_id
Tagsag_kezdete
Tagsag_vege (az aktuális csapatánál 9999.12.31)Ugyanezt elkészíteném a sérülések-re:
Rekord_id
Jatekos_id
Serules_kezdete
Serules_vege (ez mindaddig 9999.12.31., amíg sérült a játékos) -
Jim74
nagyúr
Nem a CROSS JOIN kulcsol mindent mindennel? A CROSS APPLY is hasonlóan működik, de annak van még valami egyéb tulajdonsága, csak nem emlékszem pontosan, hogy mi.
Vagy rosszul tudom? -
Jim74
nagyúr
-
Jim74
nagyúr
Masterfiled-nél voltam alap SQL oktatáson. Háááát, ha kollégám nem tartott volna előtte jó pár órás felkészítést, akkor pislogtam volna, mint hal a szatyorban

Nem rossz, de 4 nap alatt elég tömény a dolog, ha sosem foglalkoztál előtte vele. De, ha egyszer ráérzel az ízére már sosem akarsz többé excelt használni

-
Jim74
nagyúr
Sziasztok!
MSSQL-ben kellene azt megoldani, hogy a mai dátumhoz adjon hozzá x napot (pl. 8 nap), majd ehhez a dátumhoz képest az első péntek dátumát adja vissza. Tehát ma + 8 nap az 2018-12-16, de ez vasárnap, nekem pedig a 2018-12-21.-i péntek dátumára lenne szükségem.
Az elsörész ok:
select (getdate() + 8), de innen hogyan tovább azt nem tudom!Előre is köszönöm, annak aki tud segíteni!
Remélem jó lesz, amit összeraktam
.
A lényeg, ha a +8 nap dátum péntekre vagy előbbre esik, akkor 5-től annyival kevesebb napot kell hozzáadni a + 8 napos dátumhoz, ahányadik nap a héten a + 8 napos dátum.
Ha péntek után esik a +8 nap, akkor 12-től (5 + 7, azaz péntek + 1 hét) annyival kevesebb napot kell hozzáadni a + 8 napos dátumhoz ahányadik nap a héten a + 8 napos dátum.Remélem sikerült érthetően fogalmaznom, így jó pár pohár bor után
. Mindenféleképpen próbáld ki pár napon, hogy jól számol-e 
Igazából az első set date-s sor és az utolsó iif-esre van szükséged, a többi csak az átláthatóság kedvéért hagytam benne.
set DATEFIRST 1 -- ezzel beállítod, hogy a hétfő legyen a hét első napja, mert alap esetben, ha jól tudom, akkor a vasárnap az 1. Én jobban szeretem, ha a hétfő az 1.
select cast(getdate()as date) as "Mai nap dátum"
,datepart(weekday,getdate()) as "Mai nap sorszáma a héten"
,cast(getdate()+8 as date) as "Mai nap + 8 nap dátum"
,datepart(weekday,getdate()+8) as "Mai nap + 8 nap sorszám a héten"
,iif(datepart(weekday,getdate()+8)<=5,cast(getdate()+8+(5-datepart(weekday,getdate()+8)) as date),cast(getdate()+8+(12-datepart(weekday,getdate()+8))as date)) -
Jim74
nagyúr
Sziasztok!
MSSQL-ben kellene azt megoldani, hogy a mai dátumhoz adjon hozzá x napot (pl. 8 nap), majd ehhez a dátumhoz képest az első péntek dátumát adja vissza. Tehát ma + 8 nap az 2018-12-16, de ez vasárnap, nekem pedig a 2018-12-21.-i péntek dátumára lenne szükségem.
Az elsörész ok:
select (getdate() + 8), de innen hogyan tovább azt nem tudom!Előre is köszönöm, annak aki tud segíteni!
-- törölt hsz. --
-
Jim74
nagyúr
Sziasztok!
MSSQL-ben kellene azt megoldani, hogy a mai dátumhoz adjon hozzá x napot (pl. 8 nap), majd ehhez a dátumhoz képest az első péntek dátumát adja vissza. Tehát ma + 8 nap az 2018-12-16, de ez vasárnap, nekem pedig a 2018-12-21.-i péntek dátumára lenne szükségem.
Az elsörész ok:
select (getdate() + 8), de innen hogyan tovább azt nem tudom!Előre is köszönöm, annak aki tud segíteni!
Azt hiszem a weekday utasítás adja meg egy adott nap hányadik a héten.Ez alapján meg lehet képlettel hatarozni a következő pénteket. Azt hiszem a vasárnap az 1 alap sql beállításban, de nem vagyok benne biztos. Telefonról vagyok, ha nem megy, akkor este jobban utána tudok nézni.
-
Jim74
nagyúr
Közben megcsináltam "favágó" módszerrel

A selectet lefuttattam top 1-re, azt kimásoltam fejléccel Excelbe. Kitöröltem az egy adatot tartalmazó sort, hogy csak a fejléc maradjon, majd elmentettem csv-be.
Utána lefuttattam a teljes select-et, azt exportáltam fejléc nélkül csv-be, utána parancssorból össze copyztam a két csv file-t.Tudom, hogy nem elegáns, de most ez volt a leggyorsabb.

-
Jim74
nagyúr
Köszönöm
Olvasgatok...
Aztán, ha nagyon nem megy, akkor a könyvvizsgálók megkapják a 6 milló rekordos adatbázisukat fejléc nélkül
Majd mailben megírom nekik, hogy melyik oszlopnak mi a fejléce. Így is szétsz*ptam az agyam, mire SAP-ból legyűjtöttem az adatokat... 
-
Jim74
nagyúr
Sziasztok,
Ki kellene exportálnom egy lekérdezés eredményét txt-be, vagy csv-be. A copy - paste megoldás nem jó, mert a select végeredménye kb. 6 millió rekord. Ja, és ezt úgy kellene megtenni, hogy a fejlécek is benne legyenek az exportált állományban.
Előre is köszönöm segítséget

-
Jim74
nagyúr
-
Jim74
nagyúr
Sziasztok!
Van egy tábla, amiben user login adatok vannak (azonosító, ipcim, login dátum, stb)
Egy userhez több login dátum is tartozhat, vagy egyáltalán nincs login dátuma (egyéb adatai miatt viszont szerepel).
Hogyan lehetne lekérdezni azokat a usereket, akik egyáltalán nem léptek be, vagy az utolsó login dátum 1 évnél régebbi?
Két feltételnek kellene teljesülnie, azonban az egyiknek group by vonzata van ( max(login_date)).
Előre is köszönöm a segítséget.

-
Jim74
nagyúr
-
Jim74
nagyúr
-
Jim74
nagyúr
Sziasztok!
Ha van egy táblám, amiben az egyik oszlop mezőit szeretném ugyanazzal a számmal feltölteni, de csak kb. 100 sort, akkor azt hogyan tudom a legegyszerűbben megtenni?
Köszönöm

-
Jim74
nagyúr
-
Jim74
nagyúr
-
Jim74
nagyúr
Sziasztok!
Szeretnék otthon SQL dolgokat gyakorolni. A munkahelyemen MS SQL szerver van, amira Visual Studioval csatlakozunk és használjuk. Van valamilyen otthoni megoldás, hogy gyakorolhassam az SQL parancsokat, lekérdezéseket stb.?
Köszönöm a segítséget

-
Jim74
nagyúr
-
Jim74
nagyúr
Sziasztok!
Teljesen kezdőként szeretnék segítséget kérni. Adott öt tábal:
1. Egy sima naptár a 2016-os és 2017-es dátumokkal és jelölve a nap sorszámával (hétfő=1, kedd=2, stb...)
2. Szállodai szobák száma és ára (szobaszám és mellette az egységára (1 éjszaka ára)
3. Szoba foglalások 2016. évre és 2017.év legelejére: szobaszám , dátumtól – dátumig foglalások
4. Hét napjaira felárak (Péntek, Szombat, Vasárnapra)
5. Speciális felár időszakokra (dátumtól – dátumig) speciális szezoni felár (téli, nyári időszakra)Felár számításnál a prioritás :
Ha vonatkozik adott napra „specfelár” , akkor azt kell figyelembe venni (téli, nyári napok illetve karácsony környéke),
ha nincs „specfelár” adott napra, akkor az „alapfelár” érvényesül (például a hétvégi alapfelár)Feladat: Mennyi az így keletkezett árbevétel a 2016. naptári évre?
Hogyan lehet ezt MS SQL lekérdezésekkel megoldani úgy, hogy az alap táblákat nem módosítjuk (view-kat létre lehet hozni).
Előre is köszönöm a segítséget

Munkahelyen ilyen kis házi versenyfeladat, de természetesen jelezni fogom, hogy nem veszek részt a versenyben, mert segítséget kértem. Excel-lel meg tudnám valahogy oldani, de SQL-ben még csak kapirgálom a felszínt.
Valahogy be kellene áraznom a naptárban a napokat (sima nap 1-es, feláras nap1,X-es szorzó a feláras táblák és prioritás alapján).
A foglalásokat meg szét kellene szednem napokra és a beárazott naptárral összevezetni.
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
- playseat evolution black actifit
- Precision 3560 27% 15.6" FHD IPS i7-1165G7 T500 16GB 512GB NVMe magyar vbill IR kam gar
- Gamer Gép - MSI H610, Intel I5 13600, 16GB DDR4, RTX 3070 Ti, 1TB M.2 SSD, 750W 80+ Gold
- Asztali PC i7 6700 1650 16GB DDR4 512GB SSD
- ASUS TUF Gaming A17 Gamer laptop , R7 6800H , 16GB DDR5 , RTX 3050 Ti
- Dell OptiPlex/ Hp EliteDesk /Lenovo ThinkCentre mini, micro PC/ 8.-9.-10.gen/ Számla/garancia
- ÚJ/BONTATLAN Surface Pro 7+ i5-1135G7 16G 256GB 1 év garancia
- Dell 27" USB-C Hub Monitor - P2723DE - 27% ÁFÁs
- Apple iPhone 17 - Black - 256GB - BONTATLAN - ONE - Jótállás:2029.04.30
- Nvidia Quadro P400/ P620/ P1000/ T400/ RTX A2000 6/12GB + RTX 4000 SFF 20GB ADA- Low profile (LP)
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
) és akkor lefekszik az egész....
.
.
Így nem tudok konverziót végezni. De megpróbálom rávenni a küldő oldalt, hogy ezt tegyék meg. Nekik semmiből sem tartana ezt is beleírni még.




