J'ai le tableau suivant:
select min(price) from table where itemid not in (select itemid from table where price= (select min(price) from table));
9 Réponses :
select price from table where price in ( select distinct price from (select t.price,rownumber() over () as rownum from table t) as x where x.rownum = 2 --or 3, 4, 5, etc )
Cela pourrait fonctionner, mais le ce n'est pas nécessairement rangée 2. Il pourrait y avoir deux valeurs minimales comme ci-dessus, les éléments indiqués = 1 et 4 ont les deux 10
@Buras comment c'était ce qui précède? Mes excuses si cela ne fonctionne pas, je n'ai pas d'instance DB2 pour le tester.
@Tomstudee je crois que la fonction est orthographiée Row_Number ().
@Buras à l'aide de Row_Number () sur un ensemble de résultats intermédiaire de valeurs distinctes, il ne peut y avoir de valeurs en double sur la sélection de la plus interne. La sélection la plus à l'extérieur semble superflue telle qu'elle est écrite car elle affiche des prix en double, mais rien avec elle. Cependant, dans d'autres exemples, vous pourriez envisager d'utiliser dense_rank () car il identifiera plusieurs rangées si elles sont liées à la deuxième place. La fonction de rang () est légèrement différente et probablement pas utile ici, car s'il y a des valeurs nouées, les numéros de rang seront ignorés. Dans une cravate pour la 1ère place, la 2e place sera ignorée par rang (), mais pas par Dense_Rank ().
Vous ne savez pas si ce serait le plus rapide, mais cela faciliterait la sélection du deuxième, troisième, etc., changez simplement la valeur supérieure.
Mise à jour P> P> P>
C'est une bonne solution, mais il pourrait y avoir deux valeurs minimales et ne fonctionnerait pas
Le haut n'est pas disponible dans db2
SELECT MIN( price ) FROM table WHERE price > ( SELECT MIN( price ) FROM table )
Je suppose que le moyen le plus simple de faire consiste à utiliser le filtre offset-extravageur de standard SQL, distinct n'est pas nécessaire si vous n'avez pas de valeurs répétées dans votre colonne.
Pas besoin d'écrire des sous-requêtes complexes .... p> in Amazon Redshift Utilisez Limite-récupération à la place pour ... p> Sélectionnez Distinct (Prix) à partir de la table.
ordre par prix
Offset 1 rangée Fetch 1 rang 1 rangée seulement; Code> P>
Vous pouvez utiliser l'une des opérations suivantes: -
select top 1 ColumnName from TableName where ColumnName not in (select top 1 ColumnName from TableName order by ColumnName asc)
Je pense que vous pouvez trouver le deuxième minimum en utilisant Si vous voulez trouver troisième ou quatrième minimum et ainsi de suite ... vous pouvez le savoir en modifiant le nombre minimum de limite. Vous pouvez trouver à l'aide de cette déclaration. P>
blockQuote> p>
C'est une bonne réponse:
SELECT MIN( price ) FROM table te1 WHERE price > ( SELECT MIN( price ) FROM table te2 WHERE te1.brand = te2.brand) GROUP BY brand
Pour connaître le deuxième salaire minimum d'un employé, vous pouvez utiliser le suivant:
select min(salary) from table where salary > (select min(salary) from table);
Vous pouvez utiliser Fonctions de rang code>
,
Il peut sembler une requête complexe mais des résultats similaires, tels que d'autres réponses peuvent être obtenus avec le même,