Hirdetés
- Graphics: Telefonvásárlási kálváriám....avagy clickbait cím: Horror a hardveraprón
- MasterDeeJay: Egy nem átlagos Asus videókártya (GTX950M 2GB GDDR3)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Meggyi001: Áram nélkül....méltóság nélkül.....
- Lalikiraly: Mercis kalandok - Huszonnyolcadik rész - Az újrakezdés
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- N€T0X|N: Talaria tuning: meg kéne tudni állni!
- MasterDeeJay: ASRock B250M Pro4 coffeetime mod! (DDR4)
Új hozzászólás Aktív témák
-
tm5
tag
válasz
Jim Tonic
#5856
üzenetére
SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1UPDATE T -- nem emlékszem, hogy kell-e ide az alias
SET Ref = 1
FROM Tabla T
JOIN (SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1 ) jo ON T.ceg = jo.ceg AND T.adoszam = jo.adoszam AND t.datum = jo.datum
Némileg egyszerübb lenne a JOIN ha lenne egy ID oszlopa is a táblának. -
nyunyu
félisten
válasz
Jim Tonic
#4548
üzenetére
Ja tényleg, ablakozó függvényekkel lehet, hogy egyszerűbb, mivel ott összetett rendezést is tudsz alkalmazni:
select
p.product,
p.price
from products p
join (select
p1.product,
nvl(p2.valid_from, to_date('0000-01-01')) valid_from,
nvl(p1.valid_to, to_date('9999-12-31')) valid_to,
row_number() over (partition by p1.product
order by nvl(p2.valid_from, to_date('0000-01-01')) desc,
nvl(p1.valid_to, to_date('9999-12-31')) asc) rn
from products p1) b
on b.product = p.product
and b.valid_from = nvl(p.valid_from, to_date('0000-01-01'))
and b.valid_to = nvl(p.valid_to, to_date('9999-12-31'))
and b.rn = 1;Ezzel sorszámozod az egy termék rekordjait kezdő dátum szerint csökkenő és azon belül érvényességi dátum szerint növekvő sorrendben, majd veszed a legelső rekordot minden termékhez.
-
nyunyu
félisten
válasz
Jim Tonic
#4545
üzenetére
Ezeket egy selectben nem tudod összeszedni, mivel az oszlopfüggvények egymástól függetlenül értékelődnek ki.
Tehát nem max(valid_from)-hoz tartozó min(valid_to) értéket kapod vissza, hanem a globálisat.Maximum azt tudod tenni, hogy egy belső selectben leválogatod a max(valid_from)-okat minden termékhez, majd az a köré írt másik selectben kiveszed a min(valid_to)-t.
Valahogy így:
select product,
price
from products p
join (select
p1.product,
a.max_valid_from,
min(nvl(p1.valid_to, to_date('9999-12-31'))) min_valid_to
from products p1
join (select p2.product,
max(nvl(p2.valid_from, to_date('0000-01-01'))) max_valid_to
from products p2
group by p2.product) a
on a.product = p1.product
and a.max_valid_from = p1.valid_from
group by p1.product, a.max_valid_from) b
on b.product = p.product
and b.max_valid_from = nvl(p.valid_from, to_date('0000-01-01'))
and b.min_valid_to = nvl(p.valid_to, to_date('9999-12-31'));Oszlopfüggvények alapból figyelmen kívül hagyják a nullokat!
-
Apollo17hu
őstag
-
martonx
veterán
válasz
Jim Tonic
#3033
üzenetére
Szerintem ebben az esetben egy teljesen sima tárolt eljárás lenne a megoldás, persze trigger-rel is meg lehet csinálni csak nem elegáns, a triggereket érdemes kerülni, amennyire lehet.
Azaz a sima insert-ed helyett, amit egy trigger figyel, írsz egy tárolt eljárást, annak átadod a paramétereket, és az magán belül intézi az insert-et, kikeresést, és ha kell a másik táblába insert-et.
-
rum-cajsz
őstag
válasz
Jim Tonic
#3033
üzenetére
Igen, értettem én, ezért írtam a kiegészítést alulra. Tehát a select lehet ilyen is:
SELECT new.rendszám,new.autószíne, new.autótípusa from TABLE_B where table_b.rendszem=new.rendszam;
Persze ehhez az kell, hogy a TABLE_B lekérdezés eredménye csak egy sor legyen, tehát a lekérdezésed úgy kell paraméterezni, hogy a végén egy sor legyen a lekérdezés eredménye.
-
rum-cajsz
őstag
válasz
Jim Tonic
#3031
üzenetére
Ha igazán szép megoldást akarsz, akkor készítesz egy tárolt eljárást, aminek a paramétere a vizsgálandó adat. Tartalma pedig egy insert-select Utána az after triggerben meghívod ezt a programot, amikor szükséges. De az insert-select mehet közvetlenül a trigger kódjába is. pl. az ID egy oszlopa a tábla1 tábládnak.
create trigger sajáttrigger
active after insert or update
on tábla1
as
begin
insert into tábla3 (number, name)
select number, name from tábla2 where Accepted = new.id;
endErre gondoltál?
szerk:
Ja most látom, hogy az 1-es táblából akarsz értéket tenni bele, akkor úgy kell az oszlopokra hivatkoznod, hogy new.oszlopnév ez annak a táblának az oszlopa, ahová most éppen be akarsz szúrni, vagy módosítasz.
Új hozzászólás Aktív témák
- Ubuntu Linux
- A fociról könnyedén, egy baráti társaságban
- Poco F5 - pokolian jó ajánlat
- 4K vs 8K – Megéri-e a 8K TV 2026-ban?
- Túllépne a DRAM limitjein a Neo Semiconductor-féle 3D X-DRAM
- Autós topik
- Graphics: Telefonvásárlási kálváriám....avagy clickbait cím: Horror a hardveraprón
- Linux haladóknak
- Ha Darwinra hallgat az AI, nehéz lesz megállítani
- Arc Raiders
- További aktív témák...
- Apple iPad Air 5 13' 128GB (2029.02.09-ig Garancia) Csak kibontva volt, Aktiválatlan!
- Behringer B-CONTROL BCF2000 USB/MIDI kontroller
- BESZÁMÍTÁS! MSI X570 R5 5600X 32GB DDR4 512GB SSD RX 6800 16GB Kolink Unity Lateral ARG 750W
- Apple iPhone 17 256GB White Karcmentes állapot 100% akku (10 ciklus)
- HP EliteBook 655 G10 15" Ryzen 5 PRO 7530U 32GB RAM Garancia 2028.02.27.
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


