Quelle est la requête SQL plus simple pour trouver la deuxième plus grande valeur entière dans une colonne spécifique ? Bien sûr, il peut y avoir des valeurs dupliquées dans la colonne.
Réponses
Trop de publicités?Dans T-Sql, il y a deux façons :
Dans Microsoft SQL, la première façon est deux fois plus vite que le second, même si la colonne en question est organisé en clusters.
C’est parce que l’opération de tri est relativement lente comparée à la table ou l’index scan qui le `` utilise l’agrégation.
Dans Microsoft SQL 2005 et ci-dessus, vous pouvez également utiliser le `` fonction :
Je vois à la fois spécifique à SQL Server et certains MySQL solutions spécifiques ici, de sorte que vous pouvez clarifier la base de données dont vous avez besoin. Mais si je devais deviner, je dirais que SQL Server puisque c'est trivial dans MySQL.
Je vois aussi quelques solutions qui ne fonctionnent pas parce qu'ils ne parviennent pas à prendre en compte la possibilité pour les doublons, donc attention à ceux qui vous acceptent. Enfin, je vois quelques-uns qui vont travailler, mais qui fera deux balayage complet de la table. Vous voulez vous assurer que la 2ème scan est seulement en regardant les 2 valeurs.
SQL Server (avant 2012):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
MySQL:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column`
DESC LIMIT 1,1
Mise à jour:
SQL Server 2012 permet désormais de beaucoup plus propre (et standard) OFFSET/récupère la syntaxe:
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;