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!