从 table 中获取指定数量的实体(按时间戳排序)
Get specified quantity of entities from table sorted by timestamp
这很复杂,但我会尽力解释我的意思。我的想法是在用户滚动页面时服务器向客户端发送下一个 50 条记录。当用户到达指定的前端点时,fontend 将向服务器请求下一个 50 个实体。 我需要什么 SQL 查询?
查询应该像(在伪 SQL 中):
SORT TABLE table_name SELECT entity BY INDEX (150-200)
。
我希望我解释得通俗易懂。
非常感谢 ;)
编辑 1
我正在使用 PostgreSQL。
我认为答案取决于您使用的 SQL 方言。下面是一个使用 T-SQL 的小例子。它应该为您指明正确的方向。
在这里,您应该可以用 T-SQL 方言找到问题的答案:
FETCH and OFFSET explained
编辑:
对于 PostgreSQL 检查以下内容 link:
PostgreSQL FETCH example
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
如果您是 运行 最新版本的 Postgres (13),那么您可以使用标准的 fetch
子句:
select *
from mytable
order by id
offset 50 rows fetch next 50 rows only
请注意,您确实需要 order by
子句中的唯一列(或一组列)以获得稳定的分页。我假设 id
.
在更早的版本中,fetch
不可用,一种解决方法是使用 window 函数:
select *
from (select t.*, row_number() over(order by id) rn from mytable t) t
where rn between 51 and 100
这很复杂,但我会尽力解释我的意思。我的想法是在用户滚动页面时服务器向客户端发送下一个 50 条记录。当用户到达指定的前端点时,fontend 将向服务器请求下一个 50 个实体。 我需要什么 SQL 查询?
查询应该像(在伪 SQL 中):SORT TABLE table_name SELECT entity BY INDEX (150-200)
。
我希望我解释得通俗易懂。
非常感谢 ;)
编辑 1
我正在使用 PostgreSQL。
我认为答案取决于您使用的 SQL 方言。下面是一个使用 T-SQL 的小例子。它应该为您指明正确的方向。 在这里,您应该可以用 T-SQL 方言找到问题的答案: FETCH and OFFSET explained
编辑: 对于 PostgreSQL 检查以下内容 link: PostgreSQL FETCH example
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
如果您是 运行 最新版本的 Postgres (13),那么您可以使用标准的 fetch
子句:
select *
from mytable
order by id
offset 50 rows fetch next 50 rows only
请注意,您确实需要 order by
子句中的唯一列(或一组列)以获得稳定的分页。我假设 id
.
在更早的版本中,fetch
不可用,一种解决方法是使用 window 函数:
select *
from (select t.*, row_number() over(order by id) rn from mytable t) t
where rn between 51 and 100