Forudsat at create_time indeholder det tidspunkt, hvor ordren blev oprettet, og du vil have de 100 klienter med de seneste ordrer, kan du:
- tilføj create_time i din inderste forespørgsel
- bestil resultaterne af din ydre forespørgsel efter
create_time desc
- tilføj en yderste forespørgsel, der filtrerer de første 100 rækker ved hjælp af
ROWNUM
Forespørgsel:
VÆLG * FRA ( VÆLG * FRA ( VÆLG id, klient_id, oprette_tidspunkt, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn=1 ORDER BY create_time desc ) WHERE rownum <=100
OPDATERING til Oracle 12c
Med udgivelse 12.1 introducerede Oracle "rigtige" Top-N-forespørgsler
. Brug af den nye FETCH FIRST...
syntaks, kan du også bruge:
VÆLG * FRA ( SELECT id, client_id, create_time, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn =1 ORDER BY create_time desc FETCH FIRST 100 ROWS ONLY) kode>