【发布时间】:2019-12-14 02:59:37
【问题描述】:
假设我有以下数据库表:
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
我想使用按记录日期 ASC 排序的数据来获取最后 5 行。这很容易做到:
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条记录,它会导致负OFFSET,这是无效的:
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5
OFFSET (SELECT COUNT(*) FROM mytable) - 5;
那么我该如何实现呢?
【问题讨论】:
标签: postgresql