web-dev-qa-db-fra.com

Comment puis-je obtenir uniquement la première ligne d'un ensemble de résultats après la commande?

Cela me donne juste une ligne (la première):

SELECT BLA
FROM BLA
WHERE BLA
AND ROWNUM < 2

Cependant, je veux la date la plus récente; Je peux en faire la première ligne de cette façon:

SELECT BLA
FROM BLA
WHERE BLA
ORDER BY FINALDATE DESC

Lorsque j'essaie de mélanger les deux victoires partielles, cela ne fonctionne pas - apparemment, la logique "Sélectionner la première ligne uniquement" se déclenche avant l'ordre par, puis l'ordre par est ensuite ignoré.

17
B. Clay Shannon

Cette question est similaire à Comment puis-je limiter le nombre de lignes renvoyées par une requête Oracle après la commande? .

Il explique comment implémenter une limite MySQL sur une base de données Oracle qui, à en juger par vos balises et votre publication, est ce que vous utilisez.

La section pertinente est:

select *
from  
  ( select * 
  from emp 
  order by sal desc ) 
  where ROWNUM <= 5;
23
user1593858

En 12c, voici la nouvelle façon:

select bla
  from bla
 where bla
 order by finaldate desc
 fetch first 1 rows only; 

Comme c'est gentil!

26
Brian McGinity

Vous pouvez imbriquer vos requêtes:

select * from (
    select bla
    from bla
    where bla
    order by finaldate desc
)
where rownum < 2
3
rayd09

Une manière alternative:

SELECT ...
FROM bla
WHERE finalDate = (SELECT MAX(finalDate) FROM bla) AND
      rownum = 1
0
elyor