从按时间戳排序的表中获取指定数量的实体

问题描述

这很复杂,但是我将尝试解释我的意思。我的想法是在用户滚动页面时将服务器的下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,请检查以下链接: 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不可用,一种解决方法是使用窗口函数:

select *
from (select t.*,row_number() over(order by id) rn from mytable t) t
where rn between 51 and 100