Reputation: 2796
Quicky question on SQLite3
(may as well be general SQLite
)
How can one retrieve the n-th row of a query result?
row_id
(or whichever index) won't work on my case, given that the tables contain a column with a number. Based on some data, the query needs the data unsorted or sorted by asc
/desc
criteria.
But I may need to quickly retrieve, say, rows 2 & 5 of the results.
So other than implementing a sqlite3_step()==SQLITE_ROW
with a counter, right now I have no idea on how to proceed with this.
And I don't like this solution very much because of performance issues.
So, if anyone can drop a hint that'd be highly appreciated.
Regards david
Upvotes: 19
Views: 14557
Reputation: 176124
But I may need to quickly retrieve, say, rows 2 & 5 of the results.
In scenario when you need non-continuous rows you could use ROW_NUMBER()
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER() AS rn --OVER(ORDER BY ...) --if specific order is required
FROM t
)
SELECT c
FROM cte
WHERE rn IN (2,5); -- row nums
Upvotes: 1
Reputation: 16699
The general approach is that, if you want only the nth row of m rows, use an appropriate where
condition to only get that row.
If you need to get to a row and can't because no where
criteria can get you there, your database has a serious design issue. It fails the first normal form, which states that "There's no top-to-bottom ordering to the rows."
Upvotes: 0
Reputation: 5785
add LIMIT 1
and OFFSET <n>
to the query
example SELECT * FROM users LIMIT 1 OFFSET 5132;
Upvotes: 38