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
Libérer: 2025-01-07 07:35:41
original
993 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal