Haszprus

Oracle SQL expert help needed

©   Haszprus   |   bme howto

hali

van itt a 'könyvtár' feladathoz egy olyan (konkrétan a második kötelező feladat), hogy listázza ki mindegyik könyv címét és szerzőjét és ahol lehet ott adja meg hogy melyik tag kölcsönözte legutoljára.

ezt hogy lehet?

az okozza a problémát, hogy melyik tag kölcsönözte legutoljára...

itt van egy alapkezdemény:

select   kolcsonzes.kivitel,
         konyv.cim, konyv.szerzo,
         nvl(tag.nev, 'senki')
from     konyv, tag, kolcsonzes
where    konyv.raktszam = kolcsonzes.raktszam(+)
     and kolcsonzes.torzsszam = tag.torzsszam(+)
order by konyv.cim

ez persze az összes kölcsönzést listázza, nem csak a könyvenkénti utolsókat.

thx a helpet előre is.

(lehet subqueryt használni, nincs kikötve, de ha nélküle is megoldható, akkor jobb ha nem.) (az összes többivel készen vagyok)

12:33

select    konyv.cim, konyv.szerzo,
          nvl(tag.nev, 'senki'),
          kolcsonzes.kivitel
from      konyv
left join kolcsonzes
       on kolcsonzes.raktszam = konyv.raktszam
      and kolcsonzes.kivitel in (
              select    max(kolcsonzes.kivitel) 
              from      kolcsonzes 
              where     kolcsonzes.raktszam = konyv.raktszam 
              group by  kolcsonzes.raktszam
              )
left join tag
       on kolcsonzes.torzsszam = tag.torzsszam
order by  konyv.cim

Nem biztos hogy jó, de az eredmény alapján jónak tűnik, jobbat meg még nem tudtam produkálni.

Update 12:59: éés 23 órával a határidő előtt leadva, yeah.

RSS: hozzászólások ehhez a bejegyzéshez 7 hozzászólás

Szólj hozzá Te is!

ez valami olyasmi lehet, mint amikor nekem Romai Jog 2 n feladjak, hogy ha egy romai not elrabolnak akalozok es roman kivul szuletik gyereke, akkor mondjam meg hogy a gyerek milyen jogallasu. talan.

kédezd meg sztem levlistán, ott valszeg nagyobb az esélye, hogy tudja vki

brom, még tegnap megkérdeztem, csak válasz nem jött

Ís ha beteszel még egy kverit, ami a könyv azonosítója alapján visszadobja, hogy kinél van? Jójó, én nem értek hozzá...

SELECT konyv.cim, konyv.szerzo, NVL (
(SELECT * FROM
(SELECT tag.nev
FROM tag, kolcsonzes
WHERE tag.torzsszam=kolcsonzes.torzsszam AND
kolcsonzes.raktszam=konyv.raktszam
ORDER BY kolcsonzes.datum)
WHERE rownum=1)
,'senki')
FROM konyv
ORDER BY konyv.cim

így első (naiv) megközelítésre kb ennek mennie kell, a sorrend szerinti első n sor kiválasztása mindig is körülményes volt Oracle-ben, lévén nincs se LIMIT, se TOP és a rownum ORDER BY előtti sorszámot ad meg.

A kolcsonzes.datum mezot csak feltetelezem h valahogy így tárolod a kolcsonzes idejet

Oh köszke, közben én is megcsináltam a magam módján, ezt egy update-ben leírom.

A te query-det is kipróbáltam később, minden rowban ugyanazt a tag.nevet adja vissza és most lusta vagyok hogy rájöjjek miért (a saját querym már megy ).

A rownum meg valami őrületesen ocsmány, komolyan nincs szebb módja lekérdezni a negyedik legtöbb időre kivett könyvet, mint a következő? Szemléltetésül…

select * from (select * from (select sum(ido) as sumido, cim
from (
    select nvl(vissza,sysdate)-kivitel as ido, konyv.cim
    from kolcsonzes, konyv
    where kolcsonzes.raktszam = konyv.raktszam
    group by cim, vissza, kivitel
    )
group by cim
order by sumido desc)
where rownum < 5
order by sumido asc)
where rownum < 2


Mennyivel szebb ez limittel…

Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...