I have an SQL table Foo
which looks similar to this:
CREATE TABLE Foo (
ID int NOT NULL PRIMARY KEY,
Size int,
);
I have this query:
SELECT * FROM FOO
ORDER BY Size ASC;
I want to limit this query to have N
objects after a specific ID
in that order.
So e.g. I have this table:
ID | Size |
---|---|
0 | 4 |
1 | 8 |
2 | 1 |
3 | 3 |
4 | 10 |
5 | 7 |
This would order to:
ID | Size |
---|---|
2 | 1 |
3 | 3 |
0 | 4 |
5 | 7 |
1 | 8 |
4 | 10 |
Now I want the first 3 (N
) elements after the ID 3. So the resulting query should return:
ID | Size |
---|---|
0 | 4 |
5 | 7 |
1 | 8 |
My solution would be to query the Size
where the ID
is 3 first and then limit the query to the number N
, but I wonder if there is a way to handle this in a single query.
Edit: The size column is not unique an my approach would therefore not work.
CodePudding user response:
Use a WHERE
clause with a subquery to only consider rows with a size greater than that of ID 3:
SELECT *
FROM foo
WHERE size > (SELECT size FROM foo WHERE id = 3)
ORDER BY size ASC
LIMIT 3;