如何从SQL表中选择部分记录

时间:2017-06-27 04:39:53

标签: sql presto

您有一个包含超过3百万条记录(行)的表。所以我想选择它们,如第1,第2,第3 ...... 5缺乏记录。我怎样才能做到这一点。

4 个答案:

答案 0 :(得分:3)

Presto,MySQL和PostgreSQL支持LIMITOFFSET关键字,因此您可以获取“页面”,例如

SELECT * FROM table [ ORDER BY ... ] OFFSET 1000 LIMIT 1000

将为您提供第二组1000条记录。 ORDER BY部分是可选的,但没有明确的排序,第二个“页面”或结果可以是任何东西,甚至与第一个“页面”相同(这可以在各种数据库中实际观察到)。

注意:OFFSET不一定是分页结果的最佳方式。即使数据库通常支持OFFSETuse 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);