Для первого вопроса, почему бы просто не использовать?
SELECT COUNT(*) FROM myTable
чтобы получить счет.
А для второго вопроса первичный ключ строки - это то, что следует использовать для идентификации конкретной строки. Не пытайтесь использовать для этого номер строки.
Если вы вернули Row_Number () в своем основном запросе,
SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User
Затем, когда вы хотите вернуться на 5 строк назад, вы можете взять номер текущей строки и использовать следующий запрос для определения строки с currentrow -5
SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
FROM User ) us
WHERE Row = CurrentRow - 5