sql >> Database >  >> RDS >> Oracle

Hoe de Top 100-rijen in Oracle te selecteren?

Ervan uitgaande dat create_time de tijd bevat waarop de bestelling is gemaakt, en u wilt de 100 klanten met de laatste bestellingen, kunt u:

  • voeg de create_time toe aan je diepste zoekopdracht
  • orden de resultaten van uw buitenste zoekopdracht volgens de create_time desc
  • voeg een buitenste zoekopdracht toe die de eerste 100 rijen filtert met ROWNUM

Vraag:

  SELECT * FROM (
     SELECT * FROM (
        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
  ) WHERE rownum <= 100

UPDATE voor Oracle 12c

Met release 12.1 introduceerde Oracle "real" Top-N queries . Met behulp van de nieuwe FETCH FIRST... syntaxis, kunt u ook gebruiken:

  SELECT * FROM (
    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)


  1. Een SQL IN-component parametriseren

  2. Genereer een datumbereik met SQL

  3. Hoe maak ik een tabel met beperkingen terwijl ik gegevens uit een andere tabel haal?

  4. Snelheid van MySQL LIKE-query verhogen?