您有一个包含超过3百万条记录(行)的表。所以我想选择它们,如第1,第2,第3 ...... 5缺乏记录。我怎样才能做到这一点。
答案 0 :(得分:3)
Presto,MySQL和PostgreSQL支持LIMIT
和OFFSET
关键字,因此您可以获取“页面”,例如
SELECT * FROM table [ ORDER BY ... ] OFFSET 1000 LIMIT 1000
将为您提供第二组1000条记录。
ORDER BY
部分是可选的,但没有明确的排序,第二个“页面”或结果可以是任何东西,甚至与第一个“页面”相同(这可以在各种数据库中实际观察到)。
注意:OFFSET
不一定是分页结果的最佳方式。即使数据库通常支持OFFSET
,use it judiciously。
Presto supports OFFSET
since Presto 311。
在该版本之前,Presto有LIMIT
但没有OFFSET
,所以
您需要按照可以用作“页面大小”的值进行排序,例如
SELECT * FROM table WHERE id > <<last-seen-id>> ORDER BY id ASC LIMIT 1000
<<last-seen-id>>
将是您在1000条记录中已经看到的最高id值,您必须不断为每个“页面”更新它。
即使在本地支持OFFSET
的数据库中,这实际上也是the recommended approach。
答案 1 :(得分:0)
我不确定你的问题是否得到了解,但你可以使用类似的东西
SELECT * FROM `table_name` LIMIT 10 OFFSET 100
10是起点
100是限制(根据您的要求获得记录总数)
答案 2 :(得分:0)
我一次设置了10行。你可以根据自己设定。
你可以试试这个:
对于前10行:
SELECT * FROM tableName LIMIT 10 OFFSET (1-1)*10
对于第10行:
SELECT * FROM tableName LIMIT 10 OFFSET (2-1)*10
对于第10行:
SELECT * FROM tableName LIMIT 10 OFFSET (3-1)*10
第n 10行:
SELECT * FROM tableName LIMIT 10 OFFSET (n-1)*10
希望这会对你有所帮助。
答案 3 :(得分:-1)
在MSSQL新版本中,您可以进行分页。
请参阅以下代码供您参考。
Declare
@PageNumber INT = 1,
@PageSize INT = 100
SELECT Column1, Column2,Column3
FROM dbo.[TableName]
ORDER BY Column1
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE);