17. november 2006 - 14:35Der er
2 kommentarer og 2 løsninger
Hvordan laver jeg et loop?
Nedenstående kode giver mig det rigtige resultat, men kun for instrumentet '10002564'. Jeg har brug for at skifte '10002564' ud med et sub-select, så jeg kan generalliserer min forespørgsel til en række instrumenter. Jeg vil fortsat kun have de første 5 svar pr instrument.
Hvordan gør jeg det?
select * from ( select max(l.id), max(l.name), l.price, min(l.updat) as updat from ci.instrument_log l where l.id = '10002564' group by price ) where rownum < 6 order by updat desc
Du kan bruge row_number() isf. rownum. Selvom det lyder næsten ens er det meget forskellige syntax da row_number() er en af de analytiske funktioner.
Dette må være noget i stil med:
select * from ( select id, name, price, updat, row_number() over (partition by id order by updat desc) lbnr from (select max(l.id) id, ................ from ci.instrument_log l group by l.id, l.price) ) where lbnr < 6
Forøvrigt kan du ikke være sikker på at du får de 5 nyeste når du har rownum < 6 og order by på samme niveau, idet den laver afgrænsning på de 5 rækker først og sorteringen bagefter.
Jeg har prøvet at indsætte det jeg gerne vil skifte instrument id'et ud med ind. Jeg kan ikke helt gennemskue hvor det skal ind i den kode du har lavet.
select * from ( select max(l.id), max(l.name), l.price, min(l.updat) as updat from ci.instrument_log l where l.id in (select i.id from ci.instrument i where i.name like '%CDS%')
group by price ) where rownum < 6 order by updat desc
"l.id in (select i.id from ci.instrument i where i.name like '%CDS%') " skal tilføjes den inderste select, det må også betyde at du skal bruge l.id isf. max(l.id)
select * from ( select id, name, price, updat, row_number() over (partition by id order by updat desc) lbnr from (select l.id, max(l.name) name, l.price, min(l.updat) updat from ci.instrument_log l where l.id in (select i.id from ci.instrument i where i.name like '%CDS%') group by l.id, l.price)) ) where lbnr < 6
Det virker (bortset fra en parantes for meget) - tak
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.