Maison >base de données >tutoriel mysql >Comment récupérer efficacement la ligne supérieure d'une table Oracle à l'aide de « ORDER BY » et « ROWNUM » ?

Comment récupérer efficacement la ligne supérieure d'une table Oracle à l'aide de « ORDER BY » et « ROWNUM » ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-07 07:35:41990parcourir

How to Efficiently Retrieve the Top Row from an Oracle Table Using `ORDER BY` and `ROWNUM`?

Utiliser efficacement Oracle ORDER BY et ROWNUM

Dans Oracle, la pseudo-colonne ROWNUM fournit un moyen de récupérer des lignes spécifiques d'un ensemble de résultats en fonction de leur séquence. Cependant, l'utilisation de ROWNUM avec ORDER BY peut conduire à des résultats inattendus.

Pour récupérer l'enregistrement le plus récent d'une table, la requête SQL suivante est couramment utilisée dans SQL Server :

SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC

Cependant , dans Oracle, en utilisant cette approche avec ROWNUM comme dans la requête suivante :

SELECT *
FROM raceway_input_labo 
WHERE  rownum <= 1
ORDER BY t_stamp DESC

récupèrera l'enregistrement le plus ancien au lieu du plus récent. En effet, ROWNUM est évalué avant ORDER BY dans Oracle.

Pour récupérer efficacement l'enregistrement le plus récent à l'aide de ROWNUM d'Oracle, utilisez des sous-requêtes comme suit :

SELECT * 
FROM 
    (SELECT *
     FROM raceway_input_labo 
     ORDER BY t_stamp DESC)
WHERE  rownum <= 1

Cette approche de sous-requête garantit que l'ORDER BY est appliqué en premier, ce qui donne le résultat souhaité.

Alternativement, une solution plus polyvalente qui fonctionne à la fois dans SQL Server et Oracle peut être implémentée à l'aide la fonction row_number() :

select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
      from raceway_input_labo ril
     ) ril
where seqnum = 1

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn