sql >> Databáze >  >> RDS >> Oracle

Jak vybrat 100 nejlepších řádků v Oracle?

Za předpokladu, že create_time obsahuje čas vytvoření objednávky a chcete 100 klientů s nejnovějšími objednávkami, můžete:

  • přidejte do svého nejvnitřnějšího dotazu hodnotu create_time
  • uspořádejte výsledky vnějšího dotazu podle create_time desc
  • přidat nejvzdálenější dotaz, který filtruje prvních 100 řádků pomocí ROWNUM

Dotaz:

  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

AKTUALIZACE pro Oracle 12c

Ve verzi 12.1 společnost Oracle představila "skutečné" Top-N dotazy . Pomocí nového FETCH FIRST... syntaxi, můžete také použít:

  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. Ekvivalent ST_Buffer pro vyhledávání založené na kruhu v MySQL?

  2. ORA-00904:neplatný identifikátor v tomto případě

  3. Příkaz SELECT pomocí množiny Algebra

  4. Funkce hodnocení v MySQL