sql >> Databasteknik >  >> RDS >> Oracle

Hur väljer man de 100 bästa raderna i Oracle?

Om du antar att create_time innehåller tiden då beställningen skapades och du vill ha de 100 kunderna med de senaste beställningarna, kan du:

  • lägg till create_time i din innersta fråga
  • ordna resultaten av din yttre fråga efter create_time desc
  • lägg till en yttersta fråga som filtrerar de första 100 raderna med ROWNUM

Fråga:

  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

UPPDATERING för Oracle 12c

Med version 12.1 introducerade Oracle "riktiga" Top-N-frågor . Använder den nya FETCH FIRST... syntax kan du också använda:

  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. Att konvertera en sträng till datum och göra ett undantag när en given sträng är ogiltigt

  2. Skapar DATETIME från DATE och TIME

  3. Att använda npgsql 12 och ef 6 tillsammans - har någon lyckats med det?

  4. Är det möjligt att göra N-master => 1-slav replikering med MySQL?