Hirdetés
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Magga: PLEX: multimédia az egész lakásban
- gban: Ingyen kellene, de tegnapra
- MasterDeeJay: i7 4980HQ asztali gépben (vs i7 4770)
- juhi11: Karácsony esély, hogy észrevegyük: mások is valakik - még Isten is
- btz: Internet fejlesztés országosan!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Toomy: FOXPOST: régen jó volt, de már jobban jársz, ha elfelejted
Új hozzászólás Aktív témák
-
válasz
bambano
#6005
üzenetére
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
. -
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. -
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. -
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.
-
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...
-
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. -
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. -
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 -
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. -
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. -
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 -
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. -
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
. -
válasz
sztanozs
#4349
üzenetére
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

-
válasz
bandi0000
#4277
üzenetére
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.
-
-
válasz
bambano
#4176
üzenetére
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

-
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

-
válasz
kezdosql
#4112
üzenetére
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.
-
válasz
kezdosql
#4097
üzenetére
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) -
válasz
barnam_
#3976
üzenetére
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

-
válasz
mr.nagy
#3935
üzenetére
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)) -
válasz
mr.nagy
#3935
üzenetére
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.
-
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.

-
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... 
-
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

-
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.

-
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

-
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

-
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
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- 130 - 131 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4080
- iPhone 15 Pro Max 256GB Blue Titanium -1 ÉV GARANCIA -Kártyafüggetlen, MS4242, 100% Akksi
- Telefon felvásárlás!! Samsung Galaxy A16, Samsung Galaxy A26, Samsung Galaxy A36, Samsung Galaxy A56
- MacBook Pro 13, 14, 15, 16, MacBook Air M1, M2 M3 M4 bill magyarosítás lézerrel / sapkacserével
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: Laptopszaki Kft.
Város: Budapest
.
.


![;]](http://cdn.rios.hu/dl/s/v1.gif)


