SQL. Est-il un moyen efficace pour trouver la deuxième valeur la plus basse?
J'ai le tableau suivant:
ItemID Price
1 10
2 20
3 12
4 10
5 11
J'ai besoin de trouver le deuxième prix le plus bas. Jusqu'à présent, j'ai une requête qui fonctionne, mais je ne suis pas sûr que c'est la plus efficace requête:
select min(price)
from table
where itemid not in
(select itemid
from table
where price=
(select min(price)
from table));
Ce que si je dois trouver de la troisième OU de la quatrième prix minimum? Je ne suis même pas mentionner d'autres attributs et des conditions... Est-il un moyen plus efficace de faire cela?
PS: a noter que le minimum n'est pas une valeur unique. Par exemple, les articles 1 et 4 sont les deux minimums. Commande Simple de ne pas le faire.
OriginalL'auteur Buras | 2013-06-08
Vous devez vous connecter pour publier un commentaire.
comment combat ci-dessus? mes excuses si cela ne fonctionne pas, je n'ai pas une instance db2 de le tester sur.
Je crois que la fonction est orthographié row_number().
à l'aide de la fonction row_number() sur un résultat intermédiaire ensemble de valeurs distinctes, il ne peut y avoir de doublons sur les recoins les plus profonds de SÉLECTIONNER. Le ultrapériphériques SÉLECTIONNEZ semble superflu comme l'écrit car il montre que le double de prix, mais rien avec elle. Cependant, dans d'autres exemples, vous pouvez envisager d'utiliser dense_rank() car elle permettra d'identifier plusieurs lignes si ils sont à égalité pour la deuxième place. Le rang() la fonction est légèrement différente, et probablement pas utile ici, car s'il y a égalité de valeurs, puis classer les nombres seront ignorés. En cas d'égalité pour la 1ère place, 2e place sera ignoré par rank(), mais pas par dense_rank().
OriginalL'auteur Tom Studee
Pas si sûr que ce serait la manière la plus rapide, mais il serait plus facile de sélectionner les deuxième, troisième, etc... il suffit de changer la valeur SUPÉRIEURE de l'.
Mis à JOUR
vous avez raison, j'ai mis à jour ma réponse.
En HAUT n'est pas disponible dans DB2
OriginalL'auteur user1845791
OriginalL'auteur Hashid Hameed
Vous pouvez utiliser la commande par, puis sélectionnez le numéro de ligne 2 à l'aide de la méthode trouvée dans cette réponse.
OriginalL'auteur Dan Albert
Je suppose que la manière la plus simple de le faire est d'utiliser le décalage de récupérer le filtre de la norme sql, distinct n'est pas nécessaire si vous n'avez pas répéter les valeurs de votre colonne.
select distinct(price) from table
order by price
offset 1 row fetch first 1 row only;
pas besoin d'écrire des complexes de sous-requêtes....
Dans amazon redshift limite d'utilisation-extraction de la place pour l'ex...
OriginalL'auteur Krahul3
Vous pouvez utiliser l'une des opérations suivantes:-
OU
OriginalL'auteur Deepak Sunilkumar