2011-04-20 6 views
2

Possible en double:
How do I limit the number of rows returned by an oracle query?Oracle "n LIMIT, m" équivalent

J'ai cette requête

select * from pr_device_reading order by date_reading DESC 

Remarque que cette requête est normalisée, construite par une méthode, et le nom de la table va changer selon la méthode est un rgument, donc je ne peux pas spécifier les noms des colonnes (et je veux quand même toutes les colonnes dans le résultat).

Quel est l'équivalent de

SELECT * 
FROM pr_lecture_combustibles 
ORDER BY date_lecture DESC 
LIMIT 10,20; 

en utilisant Oracle SQL?

J'ai essayé

SELECT * 
    FROM (SELECT * 
      FROM pr_lecture_combustibles 
     ORDER BY date_lecture DESC) 
WHERE ROWNUM BETWEEN 10 AND 20; 

et other syntax, mais je reçois aucun résultat, les messages et d'autres erreurs "manque expression".

Merci

+0

désolé, je n'ai pas trouvé cette question faire une recherche rapide –

+0

Je crois que vous devez donner un alias à la ta dérivé ble. 'DE (....) COMME A'. – Lamak

+0

Dans Oracle 12c, utilisez FETCH: http://stackoverflow.com/a/18972336/290182 – beldaz

Répondre

2

Si vous pouvez accepter d'obtenir une colonne supplémentaire pour le numéro de ligne, vous pouvez appliquer la fonction analytique ROW_NUMBER et faire quelque chose comme ça

SELECT * 
    FROM (SELECT a.*, 
       ROW_NUMBER() OVER(order by date_lecture desc) rn 
      FROM pr_lecture_combustibles a) 
WHERE rn BETWEEN 10 AND 20 

Mais vous obtiendrez toutes les colonnes la table plus la colonne RN