I have table of people, with firstname and lastname.
| firstname | lastname |
|---|---|
| a | a |
| b | b |
| c | c |
| d | d |
| e | e |
| f | f |
| g | g |
| h | h |
| i | i |
| j | j |
I want to query from a specific point. For example.
SELECT FIRSTNAME, LASTNAME WHERE FIRSTNAME > 'e' order by firstname, lastname
Great. But what I would really like is for the result to tell me that result is actually from the 6th row. I have tried
SELECT FIRSTNAME, LASTNAME, ROW_NUMBER(OVER ORDER BY lastname) WHERE FIRSTNAME > 'e' order by firstname, lastname
But in that case, row_number will start from 1 when I want it to tell me that is actually the 6th element from the query
SELECT FIRSTNAME, LASTNAME order by firstname, lastname
I want to do that without actually retrieving the first five rows.
Thanks
Advertisement
Answer
You can use a subquery to enumerate the rows, then filter in the outer query:
select *
from (
select firstname, lastname, row_number() over(order by firstname, lastname) as rn
from mytable
) t
where firstname > 'e'
order by firstname, lastname