Détails
Comment sélectionner la nième ligne dans une table de base de données SQL ?
Je suis intéressé par l'apprentissage de certains moyens (idéalement) indépendants de la base de données pour sélectionner la nième ligne d'une table de base de données. Il serait également intéressant de voir comment cela peut être réalisé en utilisant la fonctionnalité native des bases de données suivantes :
- SQL Server
- MySQL
- PostgreSQL
- SQLite
- Oracle
Je fais actuellement quelque chose comme ce qui suit dans SQL Server 2005, mais je serais intéressé de voir les approches plus agnostiques des autres :
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000
Crédit pour le SQL ci-dessus : Blog de Firoz Ansari
Mise à jour: Voir la réponse de [Troels Arvin][2] concernant le standard SQL. Troels, avez-vous des liens que nous pouvons citer?
[2] : https://stackoverflow.com/questions/16568/how-to-select-the-nth-row-in-a-sql-database-table#42765
370
3
ADD :
Cela limitera les résultats à un seul résultat à partir du résultat n.
LIMIT n,1 ne fonctionne pas dans MS SQL Server. Je pense que c’est à peu près la seule grande base de données qui ne prend pas en charge cette syntaxe. Pour être honnête, elle ne fait pas partie de la norme SQL, bien qu'elle soit si largement supportée qu'elle devrait l'être. À l'exception du serveur SQL, LIMIT fonctionne parfaitement. Pour le serveur SQL, je n’ai pas réussi à trouver une solution élégante.
Voici une version générique d'un sproc que j'ai récemment écrit pour Oracle et qui permet une pagination/tri dynamique.