2010-08-20 8 views
2

J'ai une table Oracle avec deux colonnes ID et START_DATE, je veux lancer une requête pour obtenir l'ID de l'enregistrement avec la date la plus récente, initialement j'ai écrit ceci:Requête SQL pour obtenir une valeur de ligne unique à partir d'un agrégat

select id from (select * from mytable order by start_date desc) where rownum = 1 

Existe-t-il une façon plus propre et efficace de le faire? Je cours souvent dans ce modèle en SQL et finis par créer une requête imbriquée.

Répondre

1
SELECT id FROM mytable WHERE start_date = (SELECT MAX(start_date) FROM mytable) 

Encore une requête imbriquée, mais plus simple et aussi, selon mon expérience, plus standard.

+0

Mieux, mais je pense que OP voulait éviter les requêtes imbriquées. J'aurais essayé quelque chose avec des fonctions analytiques ... mais je ne suis pas sûr que cela fonctionnerait ... hmm ... – FrustratedWithFormsDesigner

+1

Cela remplit le 'obtenir tous les enregistrements avec la date de début la plus récente', ce qui n'est pas le cas de la requête OPs. +1 –

+0

Merci! Je ne suis pas vraiment en train d'essayer d'éviter les requêtes imbriquées, je suis très novice en SQL, donc je voulais juste savoir si ce que je fais est une pratique de codage sql commune (ou mauvaise). – wsb3383

0

Cela semble être une solution assez propre et efficace pour moi - je ne pense pas que vous pouvez obtenir mieux que cela, bien sûr en supposant que vous avez un index sur start_date. Si vous voulez tous les identifiants pour la date de début la plus récente, alors la solution de froadie est meilleure.