限制偏移后的sqlite顺序

时间:2016-09-08 23:44:30

标签: sql sqlite

所以我paginate a query LIMITOFFSET

可以PackageManager and getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS)
SELECT * 
FROM db.table
LIMIT 6
OFFSET 0

但是如果我尝试ORDER BY这个结果,我会得到第一个n有序行,而不是第一行n行。

SELECT * 
FROM db.table
LIMIT 6
OFFSET 0
ORDER BY first_name COLLATE NOCASE

所以而不是

bob
charles
dave
dan
doug
durrand

我想要

bob
doug
elliot
manny
ralph
xavier

2 个答案:

答案 0 :(得分:2)

你想要一个子查询:

SELECT t.*
FROM (SELECT * 
      FROM db.table
      LIMIT 6 OFFSET 0
     ) t
ORDER BY first_name COLLATE NOCASE;

请注意,这实际上会返回一组不确定的行,然后对其进行排序。

除非您使用order by,否则不一定能保证返回相同的行集。

答案 1 :(得分:2)

"前n行"在这种情况下没有意义。表格没有固有的顺序;你必须指定它。通常这是通过一些ID列来完成的,该列自动递增以跟踪插入的顺序(这可能就是你的意思)。

您在ORDER BY子句中指定顺序,这就是它以这种方式排序的原因。但是,如果您有ID列,则可以执行以下子选择:

select name from (
    select name from foo
    order by id
    limit...
) order by name