Скажем, у меня есть следующая таблица базы данных:
record_id | record_date | record_value
-----------+-------------+--------------
1 | 2010-05-01 | 195.00
2 | 2010-07-01 | 185.00
3 | 2010-09-01 | 175.00
4 | 2010-05-01 | 189.00
5 | 2010-06-01 | 185.00
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
Я хочу захватить последние 5 строк данными, упорядоченными по записи record_date ASC. Это легко сделать с помощью:
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5 OFFSET 4
Который дал бы мне:
record_id | record_date | record_value
-----------+-------------+--------------
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
3 | 2010-09-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
Но как мне это сделать, когда я не знаю, сколько записей есть и не может вычислить магическое число 4?
Я пробовал этот запрос, но если количество записей меньше 5, это приводит к отрицательному СМЕЩЕНИЮ, что неверно:
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5
OFFSET (SELECT COUNT(*) FROM mytable) - 5;
Итак, как мне это сделать?