postgresql – 按顺序获取数据库中的最后N行?
发布时间:2020-12-13 16:42:07 所属栏目:百科 来源:网络整理
导读:假设我有以下数据库表: 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 |
假设我有以下数据库表:
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 我想使用record_date 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; 那我该怎么做呢?
你为什么不用相反的方式订购?
SELECT * FROM mytable ORDER BY record_date DESC LIMIT 5; 如果您不想在应用程序中正确翻转,您可以嵌套查询并将其翻转两次: SELECT * FROM (SELECT * FROM mytable ORDER BY record_date DESC LIMIT 5) ORDER BY record_date ASC; …结果是一个相当便宜的操作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |