Come selezionare l'ennesima riga in una tabella di database SQL?
Sono interessato a conoscere alcuni modi (idealmente) agnostici di selezionare la nesima riga da una tabella di database. Sarebbe anche interessante vedere come questo può essere ottenuto utilizzando le funzionalità native dei seguenti database:
- SQL Server
- MySQL
- PostgreSQL
- SQLite
- Oracle
Attualmente sto facendo qualcosa come il seguente in SQL Server 2005, ma sarei interessato a vedere altri approcci più agnostici:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000
Credito per l'SQL di cui sopra: Firoz Ansari's Weblog
Aggiornamento: Vedi Troels Arvin'risposta per quanto riguarda lo standard SQL. *Troels, hai qualche link che possiamo citare?
370
3
ADD:
Questo limiterà i risultati ad un solo risultato a partire dal risultato n.
LIMIT n,1 non funziona in MS SQL Server. Penso che sia l'unico grande database che non supporta questa sintassi. Per essere onesti, non fa parte dello standard SQL, anche se è così ampiamente supportato che dovrebbe esserlo. In tutto tranne che in SQL server LIMIT funziona benissimo. Per SQL server, non sono stato in grado di trovare una soluzione elegante.
Ecco una versione generica di uno sproc che ho scritto recentemente per Oracle che permette l'impaginazione/ordinamento dinamico - HTH