Hirdetés
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Raspberry Pi
- Hobby elektronika
- MWC 2025: A ThinkPad notebookokról sem feledkezett meg Lenovo
- Házimozi haladó szinten
- Apple MacBook
- Mindennél nagyobb: tesztpadon a Ryzen 9 9950X3D CPU
- Milyen házat vegyek?
- Rendkívül ütőképesnek tűnik az újragondolt Apple tv
- OLED TV topic
Új hozzászólás Aktív témák
-
Hintalow
senior tag
válasz
Apollo17hu #5509 üzenetére
Kicsit megkésve, de köszönöm szépen, ez jónak tűnik
-
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Ez talán még jobb, csak annyi kéne még hozzá, hogy adnék egy "minimum rank" értéket a t2 táblához és a query végén ahhoz hasonlítanám a match_rate-et és akkor tovább csökkennne a false pozitiv:
select t1.*, tt.kategoria
from t1
left join
(
select t.*, RANK() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS rnum
from
(
select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'*') then 0 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'*') then 0 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'*') then 0 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'*') then 0 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'*') then 0 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'*') then 0 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'*') then 0 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'*') then 0 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate > 0 -
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Hát én valamni ilyesmivel indítanék:
select t.*, ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS row_num2
from
(select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'%') then -100 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'%') then -100 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'%') then -100 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'%') then -100 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'%') then -100 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'%') then -100 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'%') then -100 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'%') then -100 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
de e kőré még kell valami ilyesmi:select t1.*, tt.kategoria
from t1
left join
(
-- ide jon az elozo query
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate != -800
De ez még nem tökéletes. Van benne néhány fal pozitív kategória.Azért szedtem ketté, mert azzal a belső queryvel még kell játszani és finomhangolni a match_rate-et
Jah és remélem nem olyan sok rekord van egyik táblában sem, mert azért a descartes szorzat befigyel rendesen.
-
tm5
tag
válasz
Apollo17hu #5464 üzenetére
Tegyük fel, hogy T2-ben ez van:
('Bela', null, 'Bela',null,null,null,...)
('Cecil', null, ,null,'Cecil',null,null,...)
T1-ben:
(1234, 'Aladar', 'Bela', 'Cecil',null,null,...)
Ez most Bela vagy Cecil lesz a defaulting szabály alapján, ha nincs kategória a T2-ben erre a hármas kombinációra? -
tm5
tag
válasz
Apollo17hu #5462 üzenetére
A kategoria kötődik az m1..mn mezők sorrendjéhez?
Pl: insert into t2 (kategoria, m1, m2, m3, m4, m5, m6, m7, m8) values ('BelaElemer', NULL, 'Bela', NULL, NULL, 'Elemer', NULL, NULL, NULL);
itt pl.a kategória értéke más lenne, ha m6=Bela és m3=Elemer?
Akkor is "BelaElemer" ha m1=Bela és m2="Elemer"?
És lehetne még 1000 hasonló kérdésem a kategória képzéssel... -
nyunyu
félisten
válasz
Apollo17hu #5407 üzenetére
Valami ilyesmire gondolsz?
select a.*, b.*, c.*
from a
full join b
on b.a_id = a.id
full join c
on c.id = b.c_id
where (a.id is not null and b.a_id is null) --A-hoz nincs B kapcsolat
or (c.id is not nll and b.c_is is null) --C-hez nincs B
or (b.a_id is not null and a.id is null and c.id is null); --B-hez nincs A, CMondjuk a B-hez nincs A, C rekordért egy rendes fejlesztőt seggbe kéne rúgni, hiszen pont ezért találták fel a foreign keyeket, hogy ne lehessen ilyet csinálni.
-
nyunyu
félisten
válasz
Apollo17hu #5237 üzenetére
Rekurzió az matematikalag elegáns, gyakorlatban meg nagyon nem praktikus, akármelyik programnyelvet nézem.
-
nyunyu
félisten
válasz
Apollo17hu #5224 üzenetére
Hmm, jobban megnéztem ezt a részt:
with cte(id,ertek,runningsum,seqnum) as
(select 0.szint
union
select n+1. szint)
select ... from cte;Ez pont ugyanúgy néz ki, mint amit a Teradata 13 tutorialokban láttam anno.
Ezek szerint az már szabványosított rekurziós szintaxist használhatott?Mondjuk a Teradata mindig hamarabb implementálta az új SQL szabványokat, mint az Oracle
-
nyunyu
félisten
válasz
Apollo17hu #5224 üzenetére
Tényleg, a CTE szabványosításának az is volt a célja, hogy az addigi, DB függő szintaxis helyett könnyebben lehessen rekurzív queryket írni.
De sosem szerettem rekurzív kódot írni, mert nagyon könnyen beláthatatlan tud lenni.
-
nyunyu
félisten
válasz
Apollo17hu #5214 üzenetére
Az a baj, hogy az előző lépésben számolt értékre van szükséged a következő kiszámolásához, és nem szimplán szummázod a korábbi értékeket.
Így vagy rekurzívan számolod ki, vagy ciklust írsz rá.
Ezekre nem nagyon van szabvány szintaxis, kb. minden DBnek más megoldása van rá.
Oracle alatt valahogy így nézne ki a ciklusos megoldás:
DECLARE
v_id varchar2(10);
v_ertek number;
v_korr_ertek number := 0;
CURSOR c is
SELECT id, ertek
FROM proba
ORDER BY id;
BEGIN
OPEN c;
LOOP
FETCH c INTO v_id, v_ertek;
EXIT WHEN c%notfound;
v_korr_ertek := CASE WHEN v_korr_ertek + v_ertek > 0
THEN 0
ELSE v_korr_ertek + v_ertek
END;
dbms_output.put_line(v_id || ',' || v_ertek || ',' || v_korr_ertek);
/*
UPDATE proba
SET korr_ertek = v_korr_ertek
WHERE id = v_id;
*/
END LOOP;
CLOSE c;
END;Deklarálsz egy kurzort, amiben azonosító szerint növekvő sorrendben jönnek a rekordok, aztán azon egyesével végig mész, kiszámolva az aktuális korrigált értéket.
-
Ispy
veterán
válasz
Apollo17hu #5224 üzenetére
Szegény utókor.
-
Apollo17hu
őstag
válasz
Apollo17hu #5214 üzenetére
Többé-kevésbé sikerült összeraknom. Álljon itt az utókornak:
WITH t AS
(SELECT t.id
,t.ertek
,row_number() over(ORDER BY t.id) AS seqnum
FROM (SELECT 'A' AS "ID",-2 AS "ERTEK" FROM dual
UNION ALL
SELECT 'B',-5 FROM dual
UNION ALL
SELECT 'C',-1 FROM dual
UNION ALL
SELECT 'D', 3 FROM dual
UNION ALL
SELECT 'E',10 FROM dual
UNION ALL
SELECT 'F',-7 FROM dual
UNION ALL
SELECT 'G',-4 FROM dual
UNION ALL
SELECT 'H',20 FROM dual
UNION ALL
SELECT 'I',-1 FROM dual
UNION ALL
SELECT 'J',-3 FROM dual) t),
cte(id,ertek,runningsum,seqnum) AS
(SELECT ID
,ertek
,(CASE
WHEN ertek > 0 THEN
0
ELSE
ertek
END) AS runningsum
,seqnum
FROM t
WHERE t.seqnum = 1
UNION ALL
SELECT cte.id
,t.ertek
,(CASE
WHEN t.ertek + cte.runningsum > 0 THEN
0
ELSE
t.ertek + cte.runningsum
END) AS runningsum
,t.seqnum
FROM cte
JOIN t
ON t.seqnum = cte.seqnum + 1
/*AND t.id = cte.id*/)
SELECT cte.ertek, cte.runningsum AS korr_ertek
FROM cte
ORDER BY seqnum
-
pch
senior tag
válasz
Apollo17hu #5214 üzenetére
Ha csak annyi hogyha nagyobb mint 0 akkor legyen nulla akkor arra ott az if
IF(eredmeny>0,0,eredmény) -
nyunyu
félisten
válasz
Apollo17hu #5214 üzenetére
Mint az egyszeri matekpélda, ahol az első megállóban felszáll 2 ember a buszra, másodiknál leszáll 5, akkor hány embernek kell felszállnia a harmadiknál, hogy senki ne legyen a buszon?
-
sztanozs
veterán
válasz
Apollo17hu #4915 üzenetére
Az, hogy milyen példát hozott még nem jelenti azt, hogy ez a való életben is így lesz (lehet, hogy csak nem gondolt rá)...
-
nyunyu
félisten
válasz
Apollo17hu #4902 üzenetére
Ezt passzolom, nem látok bele ennyire az SQL optimalizálók lelkivilágába.
Érzésem szerint rá kéne jönnie, hogy ugyanazt akarod számoltatni az group by-nál is, így a korábban kapott eredményhalmazt használja, de meg kéne nézni egy konkrét végrehajtási tervet, hogy változik-e ha kiírod az order by-nál a case-whent, vagy ha oszlopsorszámmal hivatkozod.
-
tm5
tag
válasz
Apollo17hu #4895 üzenetére
Jó ez teljesen, nem lesz ez annyira lassú. Picit mondjuk lehet még egyszerűsíteni rajta:
select sum(value)
,case
when sector in (2, 3, 4) then 2
else sector
end sector_
from test
group by
case
when sector in (2, 3, 4) then 2
else sector
end -
bambano
titán
válasz
Apollo17hu #4895 üzenetére
nagy erőkkel lassítod a lekérdezést?
miért nem group by 2? -
RedHarlow
aktív tag
válasz
Apollo17hu #4889 üzenetére
Így néz ki a lekérdezésem:
SELECT a.datum, b.data1, b.data2
FROM a, b
WHERE a.datum = b.datum(+)
and b.notes = 007;
És ugyan úgy 3 sor jön le és nem értem hogy miért. :/
-
cattus
addikt
válasz
Apollo17hu #4883 üzenetére
Bocsi, a szint az ugyanaz mint a szobaszám, csak a kódban is felváltva használom. Minden mező egy táblához tartozik igen.
Az egész amúgy egy foglaló rendszerhez lesz, ahol szintenként lehet adott időpontra foglalni szobát, és adott szinten adott idősávban egyszerre egy foglalás lehet. És ehhez kéne megjelenítenem minden szinthez az időben következő eseményt ami még nem kezdődött el.
-
válasz
Apollo17hu #4866 üzenetére
-
picur10
aktív tag
válasz
Apollo17hu #4856 üzenetére
bocsánat, az lemaradt, hogy mssql-re kellene
-
válasz
Apollo17hu #4775 üzenetére
Köszönöm
Jelenleg 4 select van így egybe, hogy az első a másaodik from-jában van, majd ez az egész a harmadikban, és végül ez az egész egy negyedikben. És itt a harmadik réteg selectembe van egy feltétel aminek csak egy kimenete lehet. Es itt jött képbe, hogy innen kellene még egy adat....
Ahha, asszem értem, hogy fog össze állni, köszi -
Szmeby
tag
válasz
Apollo17hu #4668 üzenetére
Köszi Apollo! Fantasztikus ez az Oracle.
És tm5 azért csomagolta egy WITH-be, mert WHERE mögött ezek az analitikus cuccok nem használhatók, csak projekcióban (vagy hogy is hívják a from előtti részt)?
A next_id kiszámításának van valami különleges oka, vagy az amúgy elhagyható? Én feleslegesnek érzem az aktuális probléma szempontjából. Hacsak az oracle belső mechanizmusai ezt mégis megkövetelik valami mágikus okból.
Ez a megoldás amúgy a Descartes szorzathoz képest milyen előnyöket nyújt? Gyorsabb? Kíméli a memóriát? Elegánsabb?
A paraszti eszem azt súgja, hogy nem igazán lehet gyorsabb, hiszen ígyis úgyis kétszer szelektál a táblából, csak más sorrendben teszi a folyamat során. Hacsaknem attól ér el gyorsabb működést, hogy a nyers adatok diszken való rendezettségének köszönhetően a vinyó kevesebb fejmozgással is végre tudja hajtani a lekérdezést egy nagy adathalmazon. Bááár, azzal, hogy az eredeti halmazon nincs orderby, a lead függvény meg sorrendezett halmazon operál, még ez sem feltétlenül biztos. Asszem elkalandoztam. -
user112
senior tag
válasz
Apollo17hu #4551 üzenetére
Tökéletes köszönöm.
-
Petya25
őstag
válasz
Apollo17hu #4510 üzenetére
Nem a mezőket nehéz megtalálnom, hanem azt hogy hol kezdődik a következő adatcsoport.
-
bambano
titán
válasz
Apollo17hu #4473 üzenetére
logikáját tekintve valóban az, amit nyunyu írt, de ezt én is leírtam már (#4469) (eltekintve attól, amennyivel butább az oracle...
) . amit te írtál, az teljesen más. te keresnél egy számolótáblát az adatbázisban, amit nem tudok értelmezni, és azzal számolnál. ezzel szemben a postgresql (ami kikötés volt), on the fly képes sorozatokat generálni és record-setként kezelni. a hétvégéket nem modulo 7 alapján számolja, ami egyébként is lehetetlen, mert a kiinduló napnál hiába akarnál modulo7-et számolni, hanem a beépített naptár funkcióval, ahogy nyunyu is.
lelassulhat? miért is?
-
bambano
titán
válasz
Apollo17hu #4464 üzenetére
ennél sokkal egyszerűbbet szeretnék.
-
bambano
titán
válasz
Apollo17hu #4462 üzenetére
a calendarban csak a rendkívüli munkarend napjai vannak benne.
-
BuktaSzaki
tag
válasz
Apollo17hu #4400 üzenetére
Úgy értem hibásat nem dob ki, pedig bizti van. Amúgy mintha most jó lenne, annyit változtattam, hogy a count után * helyett csak szolgazon van.
-
BuktaSzaki
tag
válasz
Apollo17hu #4398 üzenetére
Több szerződésen is rajta lehetnek, de csak 1x
-
BuktaSzaki
tag
válasz
Apollo17hu #4396 üzenetére
Szia, köszi, én is erre gondoltam, de valamiért nem működik. Most olyanokat ad vissza, hogy egy szolgazon többször fordul elő, de nem ugyanazon a szerzodeszam-on, hanem az összesen
-
bpx
őstag
válasz
Apollo17hu #4342 üzenetére
Ha az XE helyett felraksz egy EE-t, akkor lesz lehetőséged olyan hagyományos típusú adatbázist létrehozni, amit mindenki más is használ, és amivel a felesleges szívástól megkíméled magad. Kivéve, ha a CDB/PDB világ érdekel.
Az XE-nek saját kísérletezős vagy development környezetben nem látom értelmét. Erre az EE is letölthető és használható licenc nélkül, és abban legalább nincsenek korlátozások.
-
bpx
őstag
válasz
Apollo17hu #4340 üzenetére
Na nem, annyira tudtam már tegnap, amikor olvastam az XE-t, hogy ez lesz.
Az Oracle a 12.1-től (6 éve) bevezette a container database architektúrát, de senki nem használja, mert extra licenc költsége van, de nincs akkora hozzáadott értéke, hogy megérje.
Ehhez képest az Oracle, amit csinál az XE-vel meg a Developer VM-ekkel, az az öntökönrúgás kategória, erőlteti a container database-t, miközben ha egy kezdő bármilyen problémára rákeres neten, még mindig a nem container database-es megoldásokat látja, vagy gányolást.
Nem, te a root conatinerbe léptél be, és common usert próbáltál létrehozni (ehhez kell a C## prefix), erre nem az a megoldás, hogy lefuttattod az 'alter session set "_oracle_script"=true;' és úgy hozod létre a usert, csak sajnos az itt kapott hibára ez a Google első találat. Meg ugye rögtön DBA role csak a belépéshez, hogyne.
Pl. egy SQL Server-es analógiával élve: a masterdb-be gányoltál bele és oda készülsz betölteni user adatokat.
Csak az SQL Servernél már régóta van masterdb és mellette más adatbázisok, mindenki tudja mit hova tegyen (remélem), az Oracle-nél meg még csak most terjed ez az architektúra.
Nem, ilyet nem csinálunk, eleve rossz helyre csatlakoztál. Neked nem a root containerhez kell csatlakozni (service = xe), hanem az automatikuson létrehozott pluggable database-hez (service = xepdb1), és azon belül kell dolgozod. Persze ezt még a Oracle a saját doksijában sem írja le normálisan, ott is a root containerhez való csatlakozást mutatja példának.
Ez nem a te hibád, egy kezdő ezeket nem tudja, de a doksi nem jó, a Google meg a régi módszereket adja megoldásnak.Ha Oracle adatbázissal akarsz foglalkozni, akkor mondom, hogy mit ajánlok.
Elfelejted az XE-t, az Enterprise Edition is letölthető, arra ingyen használható, hogy otthon egyedül tanulj rajta (és az XE is egy több GB-os monstrum).
Magamnak a host OS-re sem telepíteném (meg Windowsra sem). VirtualBox, abba egy Oracle Linux, és arra mehet a 19c EE telepítése.
Ehhez alapvető Linux, virtualizáció, networking ismeretek kellenek, ha ez hiányzik, akkor simán csak telepítsd fel a gépedre és használd ott.
Az adatbázis létrehozásánál pedig ne válassz container database-t, és ha nem akarod magad tovább szivatni, akkor General Purpose template-ből csinálsz adatbázist. Ilyet egy valós rendszeren nem csinálunk, de most pont jó lesz arra, hogy felrakjon minden szemetet, ami a sample schema-khoz kell. Ugyanitt még ne válassz ki semmilyen sample schema hozzáadást.
A sample schema-k teljes halmaza már nem jön az adatbázissal, azokat githubról lehet letölteni és utólag telepíteni. -
updog
őstag
válasz
Apollo17hu #4338 üzenetére
SYS vs SYSTEM - lényegében a saját user létrehozásán kívül ne nagyon használd ezeket
Ha a minta sémákat (HR, OE ilyenek) felraktad, akkor azokkal csatlakozhatsz (lényegében séma = user), amúgy nem nagyon van más user (SYS-szel futtatva
SELECT * FROM ALL_USERS;
megmutatja).A PDADMIN gondolom valami hasonló a PDB-k kezelésére, de mivel 11g óta nem használtam Oracle-t erről nem tudok nyilatkozni és gyors google nem segített
.
SQL Developeren szerencsére semmit nem kell beállítani egy darab connection hozzáadásán kívül, és igen, utána mókolhatsz
-
updog
őstag
válasz
Apollo17hu #4335 üzenetére
Egy Oracle XE kicsit overkill lehet pár táblás projektre, inkább mysql-t mondanék vagy sqlite-ot. De az Oracle-lel sincs baj ha nem egy krumpli a géped (régebbi laptopomat pl. kicsit megfektette ha service-ként futott automatikusan indítva).
Amire te gondolsz próbaverzió alatt, az szerintem az a PLSQL Developer, ami tényleg fizetős (ez ugye csak egy IDE), de ez független az adatbázistól, és az Oraclenek is van erre teljesen ingyenes megoldása (Oracle SQL Developer, ami egyébként több fajta DB-hez is csatlakozik nem csak Oracle-hez).
Amúgy az Oracle DB-ből akár az Enterprise-t is felrakhatod magadnak ingyen, korlátozás nélkül az összes feature-rel, ha csak otthon használod saját projektre
Na de az tényleg overkill lenne
-
Ablakos
őstag
válasz
Apollo17hu #4335 üzenetére
Windowsban az oracleXe telepítés mondhatni triviális. Még default sémát is kapsz. Feltöltve minta rekordokkal.
-
bandi0000
nagyúr
válasz
Apollo17hu #4285 üzenetére
köszi, de hogy lehet megadni neki paraméterként a tömböt? Vagy létezik, hogy csak úgy lehet hogyha átalakítom minden sorát SQL where feltételnek és azt adom be egy egész stringként?
-
bambano
titán
válasz
Apollo17hu #4180 üzenetére
"Szerencsére nem mind a 20 allekérdezés 800 soros, összesen "csak" 4.300 sorból áll a kód": teljesen megnyugodtam
-
bambano
titán
válasz
Apollo17hu #4178 üzenetére
nem merült fel, hogyha 20 darab 800 soros allekérdezés van összerakva, akkor az egész totálisan rosszul van megtervezve?
-
Apollo17hu
őstag
válasz
Apollo17hu #4174 üzenetére
Kollégámmal közösen megoldottuk.
Volt egy sanda gyanúm, hogy az új allekérdezéseken belül kell keresni a hibát, és beigazolódott. Ezek az új allekérdezések egyenként kb. 800 sornyi programkódból állnak, rengeteg tábla és allekérdezés alkotja őket. Van egy nagyobb saját sémás tábla is, ami csak kiegészítő adatot tartalmaz. Ezt kommenteztem ki, és lefutott a teljes kód. Ezzel az infóval kollégám egy egyszerű use_hash hintet rakott oda, ahova kellett, és így a saját sémás táblával együtt is 4 percen belül fut a teljes kód.
Az a fura, hogy amíg a 800 soros allekérdezéseket külön-külön futtattuk, nem "borult meg" a végrehajtásuk, viszont a teljes kódban már igen.
-
bpx
őstag
válasz
Apollo17hu #4170 üzenetére
Persze, mert a hintet nem oda kell rakni, hanem közvetlenül a SELECT után.
WITH
t1 as (...),
t2 as (...),
...
t20 as (...)
SELECT /*+ no_merge (t1 t2 ... t20) */ ...
FROM
t1,
t2,
...,
t20,
() as tx
WHERE
tx.mezo = t1.mezo(+) AND
tx.mezo = t2.mezo(+) AND
...
tx.mezo = t20.mezo(+)Vagy bele az inline view-ba:
WITH
t1 as (SELECT /*+ NO_MERGE */ ...),
t2 as (SELECT /*+ NO_MERGE */ ...),
...Ha azt akarod, hogy gyűjtse ki tempbe az egyes CTE-ket, akkor meg MATERIALIZE hint, pl.:
WITH
t1 as (SELECT /*+ MATERIALIZE */ ...),
t2 as (SELECT /*+ MATERIALIZE */ ...),
...De ez még mindig csak találgatás, plant kellene nézni futásidejű statisztikával.
-
Ispy
veterán
válasz
Apollo17hu #4170 üzenetére
Ez nem végtábla, hanem futásidőben rakja össze az sql szerver, aminek az outputja egy tábla, valahogy így....
select *
from dbo.fuggveny_neve(bemeno param1, param2,...) -
bambano
titán
válasz
Apollo17hu #4170 üzenetére
erőforrásokat nem nézted? lehet, hogy valamelyik elfogy. memória, lockok, stb. postgresql-hez értek, abban van ilyen.
másik ötlet: temporális táblába nem érdemes leválogatni a lekérdezéseket?
-
bpx
őstag
válasz
Apollo17hu #4167 üzenetére
Mindenki keresi az univerzális silver bulletet, de ilyen nincs.
Ha pl. az szeretnéd, hogy az optimizer ne fejtse ki és alakítsa át ezeket, akkor használhatod a NO_MERGE és NO_UNNEST hinteket attól függően, hogy az allekérdezés az csak inline view vagy tényleg subquery.
-
Ispy
veterán
válasz
Apollo17hu #4167 üzenetére
Csinálsz egy table valued függvényt és merge raksz össze vele egy output táblát.
-
I02S3F
addikt
válasz
Apollo17hu #4128 üzenetére
Köszönöm szépen!
-
SUPREME7
őstag
válasz
Apollo17hu #4137 üzenetére
Áhh, ennél sokkal bonyolultabb találatokat dobott a gugli, de nem sikerült összesakkozni, rá kéne gyúrni ilyen "komplexebb" lekérdezésekre, csak az a baj ritkán kell
Hálás köszönetem
-
kezdosql
tag
válasz
Apollo17hu #4095 üzenetére
Indoklassal, hogy miert minosited annak, informaciot adott volna.
Ismetlem, en nem erzelmi alapon irok, nem a szemely, hanem a tema es a megoldas az erdekes szamomra.
-
user112
senior tag
válasz
Apollo17hu #4092 üzenetére
Ebből leesett, hogy a CASE nem tartalmazhat aliast. Ha behelyettesítem a kifejezést, akkor már jó lett.
Ahány CASE, annyi Hiba mező lett, így végül is jó lett a lekérdezésem.
Köszönöm.
A belső Select-ben mit jelent az "a", 20,30 stb.? -
kezdosql
tag
válasz
Apollo17hu #4088 üzenetére
Erzelmi toltes nelkul irtam, tenyszeruen.
Adatbazis ertelemszeruen a sok tabla, minimum harmadik normal formaval.
Az "egytablas" megoldas a ket dimenzios tablazatot jelenti, aminek semi koze az adatbazishoz - legfeljebb adatforraskent. -
user112
senior tag
válasz
Apollo17hu #4090 üzenetére
Sajna pont ez a beágyazás nem megy. Ott nem enged hivatkozni az Arany-ra (invalid identifer) .
(zéró osztás kezelva van) -
kezdosql
tag
válasz
Apollo17hu #4069 üzenetére
Csinálhatod azt is, hogy mindent, de mindent egyetlen táblában tárolsz.
Ez marhasag.
Ertelemszeru, hogy kulon tablakra van szukseg, a kerdes a koztuk levo kapcsolatok.
Minimalisan kell harom tabla, csapatok, szezon es meccsek.
A kerdes az, hogyan lehet kozottuk a kapcsolatokat felepiteni.Ertelemszeru, hogy adott szezonban vannak adott csapatok, de ez valtozhat - esemeny tortenik.
Ertelemszeru, hogy minden csapat minden mas csapattal jatszik - de nem mindig, itt is esemeny tortenik.
Ertelemszeru, hogy minden csapat egyszer otthon, egyszer idegenben jatszik - de nem mindig, itt is esemeny tortenik.A szezon az "x ev/x+1 ev" neven fut, allandoan valtozo kezdesi es befejezesi datumokkal, cask a sorszama biztos.
A meccsek minden szezonban vannak meghatarozva, mindig valtozo napokon, itt datum es ido mezo kell a
pontos beazonositasra.A korabbi javaslatod jo otlet volt, kell egy "szotar" segedtabla, amivel a fentiekhez meg lehet egy esemenyek mezot is felvinni, ahhoz is datum es ido kell, igy barmi tortenik a szezonban, jon egy esemeny, es kesobb annak alapjan lehet az elemzeseket megoldani es az esemenyeket "datum-ido" tipusu mezovel lehet kezelni.
.
Lehet, hogy az lesz a magoldast, hogy minden adathoz kell egy datum-ido mezot csatolni es az alapjan lehet megtalalni a rendezesi szempontokat a kesobbi elemzesekhez, de akkor meg kell oldani, hogy pl. az adott szezon az nem egy adat, hanem ketto, van kezdete es befejezese, mindketto datum-ido mezovel, es a szezon a kozottuk levo idosavra vonatkozik.Ez viszont nekem azt veti fel, hogy nem tudom a harom fenti tablat kozvetlenul osszekapcsolni, hanem valahogy mindig be kell iktatnom kozejuk ezt a "szotar" segedtablat, mert abban vannak a mindenhez kapcsolodo datum-ido mezok, ezzel akadtam el, tul sok a kapcsolat.
-
kezdosql
tag
válasz
Apollo17hu #4064 üzenetére
Koszonom, talan valami ilyesmi lenne a megoldas, osszegyujteni egy tablaba mindenfele esemenyt es valahogy ahhoz igazitani a dolgokat.
-
mr.nagy
tag
válasz
Apollo17hu #3699 üzenetére
Szia,
köszönöm. Ha beértem kipróbálom!
-
bambano
titán
válasz
Apollo17hu #3686 üzenetére
nem
szerintem az lenne a legegyszerűbb megoldás, hogyha a lebegőpontos értéket megszorozza 5-tel és veszi az egészrészét, akkor megkapja, hogy hanyadik hisztogram oszlopba kerül az az eredmény, vagyis count és group by már használható. -
BeeGee2115
csendes tag
válasz
Apollo17hu #3643 üzenetére
Igen, köszönöm, nálam az IFNULL() volt a nyerő
A végeredmény pedig:SELECT
szla.Számla,
szla.szamla_ertek- IFNULL(tran.tranzakcio_ertek,0) AS Egyenleg
FROM
(SELECT Számla,
SUM(Összeg) AS szamla_ertek
FROM Adatok
GROUP BY Számla) szla
LEFT JOIN (SELECT Tranzakció,
SUM(Összeg) AS tranzakcio_ertek
FROM Adatok
GROUP BY Tranzakció) tran
ON szla.Számla = tran.Tranzakció -
BeeGee2115
csendes tag
válasz
Apollo17hu #3641 üzenetére
Már majdnem jó!
A +os szintaktika nem működik, ezért átírtam LEFT JOIN-ra:
SELECT
szla.Számla,
szla.szamla_ertek - tran.tranzakcio_ertek
FROM
(SELECT Számla,
SUM(Összeg) AS szamla_ertek
FROM Adatok
GROUP BY Számla) szla
LEFT JOIN (SELECT Tranzakció,
SUM(Összeg) AS tranzakcio_ertek
FROM Adatok
GROUP BY Tranzakció) tran
ON szla.Számla = tran.TranzakcióErre azonban azokak a számláknak, amelyekről sosem történt tranzakció, nem lesz egyenlege
-
BeeGee2115
csendes tag
válasz
Apollo17hu #3637 üzenetére
Kedves Apollo17hu! Azért nem hagyhatjuk ki a tranzakciókat, mert akkor hibás egyenlegeket kapunk, hiszen az egyik számláról a másikra történő átutalások kiesnének a rendszerből.
Ez már majdnem jó:
SELECT Számla,
SUM(Összeg) - SUM(CASE WHEN Tranzakció!='' then Összeg ELSE 0 END) Egyenleg
FROM Adatok
GROUP BY Számla
A probléma az hogy a tranzakció oszlopban lévő aktuális számlanevet kellene valahogy a megfelelő számlából kivonni, hiszen most csak azt vizsgáljuk, hogy üres vagy sem, de nem az értékét. Egy soron belül a tranzakció és számla oszlopok különböző számlaneveket tartalmaznak a tranzakció értelmének megfelelően. -
BeeGee2115
csendes tag
válasz
Apollo17hu #3635 üzenetére
Köszönöm! De a probléma az, hogy ez továbbra is csak a Számla oszlop szerint fog pozitív vagy negatív értékeket listázni nekem. Én azt szeretném elérni, hogy soronként haladva megvizsgáljuk a számla és a tranzakció oszlopokat is és ha a tranzakció üres akkor semmi gond, csak hozzáadjuk az összeget a számla oszlopban lévő számlához (akár pozitív, akár negatív az összeg), ha viszont van tranzakció, akkor (a biztosan pozitív) összeget ki kell vonnunk a tranzakció oszlopban szereplő számla egyenlegéből is.
Vagy egy másfajta megközelítésben szummázzuk az összegeket a számla oszlop szerint, majd kivonunk minden összeget a tranzakció oszlop alapján. És ennek vesszük a rendezett nézetét.
A két lekérdezést külön-külön már össze is raktátok nekem, ezért ezer hála, de a végső megoldást még nem lelem.
A Jézuska megérkezett közben, Boldog Karácsonyt -
Fundiego
tag
válasz
Apollo17hu #3568 üzenetére
Köszönöm. De sajnos nem működik vmiért pedig utánanéztem példákon át. lehet mert webserveren futtatom a lekérdezést?
within group-al van szerintem probléma amit nem tud értelmezni
-
Fundiego
tag
válasz
Apollo17hu #3541 üzenetére
átírtam a 'volt'-ot 1-re így már működött
-
GreenIT
tag
válasz
Apollo17hu #3423 üzenetére
Csinaltam tobbfele valtozatot, de egyik se jo, inkabb kerdezek: mi a bevalt gyakorlat?
Hogyan gondolkozzak, hogy adatrogzitesre, adattarolasra es lekerdezesre egyarant jo megoldashoz jussak?A problemam az, hogyan lehet cimeket, telefonszamokat es egyeb adatokat egyertelmuen CEG-ekhez es EMBER-ekhez rendelni.
Cimek: kis cegek a sajat lakasukat hasznaljak irodanak is, tehat ceghez ES szemelyhez is tartozik a cim es telefonszam. Irodahaznal az a jellemzo, hogy a cim es telefonszam egy-egy irodahoz tartozik, nem a ceghez.
A mobil telefonok kapcsolodhatnak a ceghez, adott alkalmazottak hasznaljak, amig a cegnel vannak, majd az utodjaik kapjak meg. Masik eset, amikor az embere a telefon, de azt ceges munkara is hasznalja, amig az adott cegnel van.
Sot ugyan az a telefonszam tobb cegnel is megjelenhet egyszerre, kulonosen, ha az illetonek sok vallalkozasa van, vagy sok a mellekallasa.Tul sokfele lehetoseg van, es ha mindegyiket meg akarom engedni, akkor sok kulonbozo tablaban kell tarolni hasonlo adatokat, igy nehez az azonos adatok kiszurese.
A masik megoldas az adohivatali sema lenne, amikor egyetlen tablaban van az osszes adatmezo, de csak egyetlen datumkezd es datumvege es indoklas mezo van, igy soronkent csak egyetlen adat valtozhat.
Ez adatrogziteskor idegesito, mert minden potenciális adatmezö megjelenik, az adatrögzitön múlik, hova ir.
Ráadásul a cégek többsége kicsi, amikor a modositas indoka koltozes, ertelemszeru, hogy a szekhely es tobb telefonszama is valtozik, viszont ennel a modszernel ez sok soron oldhato csak meg.
Extrem eset a cegfelvasarlas, akkor minden adat egyszerre valtozik es mindegyiket kulon lehet csak rogziteni. Adatrogzitesnel az lenne a jo, ha egyszerre beirhatnak az osszes adatot, ami az adott datummal letrejott vagy megszunt, es ugyan az a szoveges megjegyzes tartozik hozza.Egy harmadik lehetoseg a ketlepcsos adatkezeles, az adatrogzito csak azt irja be, hogy az adott cim, telefon letrejott, vagy megszünt, és lekérdezések során kell kitölteni, hogy az adott cim mettöl meddig élt az adott cég esetében.
Sok telephelyes cégnél viszont áttekinthetetlen egy hosszú lista, aminel csak letrejott vagy megszunt datumok vannak, hogy akkor most melyik székhelye és telephelye(i) élnek most.A "most melyik ujjamat harapjam meg" helyett inkabb azt kerdezem, milyen gondolkodasi semara kellene beallitanom az agyam, hogy a fenti harom szempont szerint egyszerre tudjak gondolkozni?
-
tm5
tag
válasz
Apollo17hu #3451 üzenetére
Kb. fél éve nekem is volt egy ehhez nagyon hasonló problémám és ott is a 12c-re való átállás okozta a teljesítmény problémát.
Zeratul megoldása nekem is beugrott (mármint a hintek használata), csak nálunk az tilosés hozzá vagyok szokva, hogy ilyenkor át kell írnom a query-t.
Amúgy ahol lehet én is szétszedem subquery-kre a feladatot, mert akkor magam is jobban értem, hogy mit csinálok. Elég sok 4-800 soros query-vel dolgozom, másképp nem is érteném meg őket
-
bpx
őstag
válasz
Apollo17hu #3445 üzenetére
Ha most tényleg az a cél, hogy a 2 subqueryt egymástól független megcsinálja 1-1 alkalommal, akkor kb. így:
SELECT /*+ use_hash(t1 t2) */ t1.mezo_1
,t1.mezo_2
FROM (SELECT /*+ no_merge no_push_pred */ t.id
,t.mezo_1
,t.mezo_2
FROM tabla_1 t
WHERE feltetel_1
AND feltetel_2
...
AND feltetel_n) t1
,(SELECT /*+ no_merge no_push_pred */ t.id
FROM tabla_2 t
WHERE feltetel_1
AND feltetel_2
...
AND feltetel_n) t2
WHERE t1.id = t2.id;A subquery itt úgy viselkedik mintha view lenne. A view-kat az adatbázis "kifejti" ha tudja, az eredeti példát szerintem simán átírja az adatbázis úgy, mintha nem is lennének subquery-k, csak a 2 táblára a join. Ez a view merging, ezt akadályozza meg a no_merge hint.
Ha a view-kon kívül is vannak egyéb feltételek, azt az adatbázis be tudja helyezni a view-n belülre. Pl. a "select * from view1 where column1='...'" lekérdezést végre lehet úgy hajtani, hogy előállítja a view1 teljes eredményhalmazát, majd a végén alkalmazza a column1 szűrést, de úgy is, hogy a column1 szűrést átírja úgy, mintha a view-n belül lenne. Ez nem csak egyszerű szűrésekre működik, hanem joinra is, tehát miután előállította a t1 tartalmát, az adatbázis a t2-be már beviszi a tabla_2.id = t1.id szűrést és felhasználja a t1-ből jövő id értékeket, ez a join predicate pushdown. Ezeket tiltja a no_push_pred.
A use_hash-t meg csak a biztonság kedvéért tettem oda, hogy mindkettő subquery-t csak 1-szer csinálja meg, és ne válasszon nested loops-t.
Aztán ezen kívül még lehetnek mindenféle más optimalizálások, amelyekre most nem gondoltam és további hintek kellenének.
De persze nem ezt tartom a jó megoldásnak.
-
sztanozs
veterán
válasz
Apollo17hu #3442 üzenetére
Vagy akár a lekérdezést (dummy mezőnevekkel)
-
bpx
őstag
válasz
Apollo17hu #3442 üzenetére
Bocsánat, de ennyi információ birtokában én is csak ennyit tudok mondani: olyat, ami gyorsít rajta. Legalább egy plant mutass, de végrehajtási statisztikákkal még jobb lenne.
-
sztanozs
veterán
válasz
Apollo17hu #3440 üzenetére
Hogy kötöd össze (NOT IN?)
-
GreenIT
tag
válasz
Apollo17hu #3423 üzenetére
Koszonom, dolgozok rajta, mar tobb valtozatot csinaltam.
Meg egy kerdesem lenne, valami vizualis szovegszerkesztot keresnek tablak kozti kapcsolatok abrazolasara.
Az a gond, hogy en vizualis vagyok, rengeteget rajzolok, tablakat hogyan tudom osszekapcsolni, de amikor mezoket at kell tenni masik tablaba, az egeszet ujra kell rajzolnom. Kepszerkesztok pedig nem jok erre.
-
Louro
őstag
válasz
Apollo17hu #3132 üzenetére
Az a THEN 1, azért problémás és igyekeztem röviden megúszni a kódsort. A THEN után is még 10 sor legalább, amiből az eredmény származik. Megoldhatnám, hogy lekezelek külön mindent, de akkor a THEN utáni részt kellene sokszor bemásolni.
-
Novics
senior tag
válasz
Apollo17hu #3113 üzenetére
Access nem ismeri, de van helyette MID, ami ugyanezt tudja.
-
Memphis
tag
válasz
Apollo17hu #3021 üzenetére
Hmmm...nem vagyok rossz excelből de ez meghaladja már a kepességeimet :-)
Azert utanajarok kicsit. Köszi -
Louro
őstag
válasz
Apollo17hu #2941 üzenetére
+1 erre. Én is ezzel a kettővel darabolnék, ha van egyértelmű szeparátor. Ha pedig fix hosszúságúak az azonosítók, akkor még könnyebb a dolgod. Akkor csak SUBSTR() kell.
-
tm5
tag
válasz
Apollo17hu #2925 üzenetére
Hát az exact match-eket ugye elég hamar megkaphatod, de közelítő összehasonlítások már más tészta. Az IBM pl. nagyon nagy összegért adja bérbe cégeknek azt a szoftverét ami ezt csinálja. De még e fölött is általában működdik egy emberi csoport aki, egy bizonyos % fölött kézzel dönti el, hogy match, false positive vagy false negative az egyezés.
Valszeg valmilyen szintű közelítést össze lehet rakni, A kérdés az az, hogy a business mennyire tolerálja, hogy ha a hibás matchelés miatt nem érik el az ügyfelet.
Pl. Váci u. az Váci utca vagy Váci út? -
martonx
veterán
válasz
Apollo17hu #2916 üzenetére
Ha nincs módja az excellel direktben lekérdezni az adatokat a DB-ből, akkor excel makróval se fogja azt tudni elérni. És ezen még a gugli se fog tudni segíteni neki
-
Iginotus
addikt
válasz
Apollo17hu #2888 üzenetére
Nem egyetlen sajnos.
Ez lesz a megoldás, csak még ki kell googlizzam hogy is viszem be ezt db2 őbe..
(Egy barátom segített...)define finIdents as varchar[2000]
define inPayLoad as boolean
quere_result is
select * from XXX.scito
where mand_id = 'VALAMI'
and scito_tst_ab > current timestamp -1 hour
and operationname = 'sendDelivMgtExec'
order by sub_row_id
inPayLoad = 0
for row in query_result
do
if (finIdents == '' and exists(row.daten, '<finIdentDetailsList>'))
then
finIdents = replace(row.daten, '%<finIdentDetailsList>', '<finIdentDetailsList>')
inPayLoad = 1
continue
end
if (inPayLoad == 1)
then
if (exists(row.daten, '</finIdentDetailsList>'))
then
finIdents = concatenate(finIdents, replace(row.daten, '</finIdentDetailsList>%', '</finIdentDetailsList>'))
break
else
finIdents = concatenate(finIdents, row.daten)
end
end
end
echo finIdents -
jocomen
aktív tag
válasz
Apollo17hu #2834 üzenetére
Igen. A mintapélda alapján, kategórián (metsző, kisörlő, nagyörlő) végzett műveletenként (húzás, tömés) van megállapítva a díj.
Eredetileg 4 tábla volt a példában, kapcsolatok nélkül (fogak, műveletek, díjszabás, beavatkozás). Én bontottam külön a kategória táblát redundancia miatt, ill. egészítettem ki egyéb táblákkal, h minél közelebb legyen a valósághoz. -
beni26k
csendes tag
válasz
Apollo17hu #2831 üzenetére
Azóta hál istennek minden érettségi forrás jó volt. Szerintem ott valamit elcsesztek. A másik dolog, előre félek attól, hogy kitől fogok kapni az MySQLhez adminpwt, mert kétlem, hogy az ott jelenlévő magyaros/matekos/földrajzos felügyelőtanár tud majd nekem ebben segíteni..
-
beni26k
csendes tag
válasz
Apollo17hu #2827 üzenetére
csvként megnyitottam libreoffice calcban ott frekvencia és teljesítmény oszlopot kijelöltem és átírtam a cellaformátumot standard magyar számról standard amerikaira és utána normálisan beimportálta. Pedig a kettő teljesen ugyanúgy néz ki
Nem kellett pontozni, se semmi.
Ha véletlenül előjön az érettségin legalább tudom mit kell tenni.
-
beni26k
csendes tag
válasz
Apollo17hu #2827 üzenetére
Ha a Basenél nem MySQLt használok, hanem a gyári HSQL motort, akkor simán engedi decimálissá való változtatást. Itt valami SQLel van. A másik dolog, hogy egy későbbi érettségiben, a 2013-masban is van egy olyan tábla, amiben területek vannak, vesszővel (pl 1215,36) és ott engedi importálni decimálisba, pedig ott is MySQLt használtam. Kipróbálom majd a ponttá alakítást előtte excelben (csvként importálom excelbe utána beillesztem basebe). Mindegyik szöveg UTF-8 kódolású.
-
Diopapa
addikt
válasz
Apollo17hu #2827 üzenetére
Pontosan ez a gond. A vesszőket át kell konvertálni pontra és utána jó lesz.
-
-=Flatline=-
tag
válasz
Apollo17hu #2811 üzenetére
Sajnos SQL a szerver...
-
Kommy
veterán
válasz
Apollo17hu #2623 üzenetére
Sajnos nem tudom megkérdezni, de most már működik miután beimportáltam sqlite-ból postgres-be most már működik megfelelően.
-
Apollo17hu
őstag
válasz
Apollo17hu #2623 üzenetére
Mondjuk ez SQLite, de megerősíti, amit írtam:
"The WITH clause cannot be prepended to the second or subsequent SELECT statement of a compound select." -
bambano
titán
válasz
Apollo17hu #2601 üzenetére
vitatnám ezt a "nincs túlbonyolítva" dolgot.
te fogod a teljes táblázatot, lekérdezed, raksz mellé egy rank függvényt, minden rekordjára, meg window funkciót, stb. és visszaadod az allekérdezésből a teljes táblázatot. majd a külső lekérdezésben kiválasztod a három legnagyobbat. ehhez felhasználtál egy csomó sql dolgot, amit nem is biztos, hogy minden sql verzió támogat.ehhez képest az enyémben az allekérdezés kiválaszt három rekordot, nincs semmi elektromos csellentyűcske, és három darab rekordot ad vissza a külső lekérdezésnek rendezésre. ráadásul a három legnagyobbat index-szekvenciális kereséssel is megtalálja az adatbáziskezelő, ha van index az adott mezőre, majd a végén összesen három rekordot kezd el sorbarendezni.
futtasd már le mindkét lekérdezést egy táblán, amiben van 20 millió rekord, indexelve...
-
attis71
tag
válasz
Apollo17hu #2599 üzenetére
Ezt a hibát kapom:
A MySQL mondta: Dokumentáció
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY aru_egysegar DESC) AS sorrend
FROM aruk) aruk
WHERE aru.sorrend < 4
OR' at line 3 -
bambano
titán
válasz
Apollo17hu #2599 üzenetére
ez egyrészt túlbonyolítás, másrészt nem is jó válasz a kérdésre.
szerintem valami ilyesmi:
select * from (select nev,ar from aru order by 2 desc limit 3) order by 2;
-
DNReNTi
őstag
válasz
Apollo17hu #2527 üzenetére
-
dellfanboy
őstag
válasz
Apollo17hu #2509 üzenetére
nagyon köszi mindkettőtöknek
-
dellfanboy
őstag
válasz
Apollo17hu #2374 üzenetére
röviden igen,
tehát select * from
where id in (és akkor ide jön a sok id több ezer)ezen id-kat társosztálytól kaptam xls-ben. (ma például 150k-t)
gondoltam arra is, hogy létrehozok create table-val egy táblát amibe berakom a 150k id-t és mellé fkeresel( ilyesmit lehet pl sql-bE?) megkeresem amire szükségem van.
de a legegyszerűbb az lenne, ha a selectem hosszabb lehetne mint 1000 sor,.. errre van pl/sql-ben lehetőség??
-
Agony
aktív tag
válasz
Apollo17hu #2471 üzenetére
Köszönöm a válaszokat!
Megoldható, mert láttam ilyet működés közben, de sajnos nem jöttem rá, mi alapján dobja szét a nevezéseket.
Egyébként úgy van ahogy írod Apollo, minden több lóval induló lovast a beérkezett nevezés mennyiségen arányosan szétoszt.Itt látható egy példa a startlista fülre kattintva. Az a lovas aki 3 lóval megy az elejére-közepére-végére van elhelyezve, akik pedig 2 lóval mennek azok az elejére és a végére.
-
smallmer
őstag
válasz
Apollo17hu #2429 üzenetére
Nem házi volt
gyakoroltam csak.
-
DopeBob
addikt
válasz
Apollo17hu #2431 üzenetére
Ez a része oké, a következő hónappal van baj, ami a beírt + 1. Szépen ki is írja, hogy azonosítónak, hogy 3+1, de össze már nem adja
-
bambano
titán
válasz
Apollo17hu #2427 üzenetére
ehhez miért kell subselect és distinct?
-
Agony
aktív tag
válasz
Apollo17hu #2423 üzenetére
Azért raktam be őket, mert amúgy rengeteg felesleges számot hoz az oszlopokhoz. Pl. dátumokat másodpercekig lebontva, összegeket meg több mint 5 tizedesjegyig.
Végül a nullával osztásra is kitaláltam egy barkács megoldást, úgyhogy benne maradt a %-os Árrés is:
case t.EGYSAR < '1' then '0'
else convert(varchar(20),cast((t.KEDV/t.EGYSAR)*100 as decimal(15,2))) end as 'Kedv %',Lényegében ugyanaz mint amit te irtál, bár a tied szakszerűbbnek tűnik.
-
Agony
aktív tag
válasz
Apollo17hu #2420 üzenetére
Köszi, igy, hogy áttettem azokat is LEFT-re most jön a megfelelő mennyiségű rekord. Most nullával osztás miatt száll el, de valami a BEKERÁR körül van, mert azt kivéve, tökéletes.
Kapirgálok még egy kicsit, köszi!
-
DopeBob
addikt
válasz
Apollo17hu #2416 üzenetére
egy régebbi könyvelő program, ahol lehet lekérdezéseket csinálni sql-el, max 1000 karakter vagy ekörüli. Egy évet és egy dátumot kellene bekérni, többször, viszont ebből adott hónap első és utolsó napja, meg köv hónap első és utolsó napja feltételek lesznek, több helyen is felhasználva, és így már elég sok karaktert elfoglalnak
-
Agostino
addikt
válasz
Apollo17hu #2399 üzenetére
üdv
azért akarom, mert össze kell fésülnöm, nincs mese : ))) mindegy hogyan, az union is oké nekem rá is nézek mindjárt. a táblám nem csak három oszlopot tartalmaz, hanem:
januar:
20 0 G 1 x
20 0 M 1 xfebuar
20 0 G 1 1az első oszlop az azonosító id. e mentén szeretném szépen egymás mellé sorjázni őket. ami ugye részben sikerült is eddig.
-
jocomen
aktív tag
válasz
Apollo17hu #2395 üzenetére
Első ránézésre nekem is az ugrott be, h ha 1 id-ra keres, akkor a count értéke 1 lesz, de mégsem. Mert ha 1-sok kapcsolat van, pl számlaszám - számlatétel, és egy számlaszámhoz több tétel tartozik, akkor a számlatétel táblában megszámolva az 1 id-hoz tartozó rekordok számát, 1-nél több sort is találhat.
... ha jól értem a kérdést.Vagyis ha a számlaszám táblában szűr, akkor 1-et fog kapni minden id-ra (nyilván), de a számlatételben több sor is tartozhat 1 id-hoz, ami itt külső kulcs.
-
bambano
titán
válasz
Apollo17hu #2387 üzenetére
zseniális
kösz mindenkinek.
Új hozzászólás Aktív témák
Hirdetés
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Raspberry Pi
- Autós topik
- Anglia - élmények, tapasztalatok
- Hobby elektronika
- Android alkalmazások - szoftver kibeszélő topik
- Beats Powerbeats Pro 2 - az Apple termék, ami jobb Androiddal
- Telekom mobilszolgáltatások
- MWC 2025: A ThinkPad notebookokról sem feledkezett meg Lenovo
- Házimozi haladó szinten
- További aktív témák...
- ZSÍR Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i9-11950H 64/1TB RTX A3000 6GB /2 Millió/
- Eladó használt M2 Mac Mini - 8gb ram, 256 Gb ssd
- ZSÍR Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i9-11950H 32/1TB RTX A3000 6GB /2 Millió/
- Turtle Beach Recon 70 /// Új // Számla+Garancia
- Eladó Apple Mini 6
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest