sqlite3,相邻行(前后)

时间:2014-08-03 23:27:49

标签: sql select sqlite

我有一张桌子:

table (
 pk int auto_increment, 
 ctx int not null, 
 msg text not null
)

我想选择,给定一些PK,之前是10行,之后是10行。问题是,我不能依赖PK(选择*来自pk< v_pk和pk> v_pk-10的表),因为它们不相邻,可能有一行与结果无关,鉴于' ctx'。

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

(select t.*
 from table t.*
 where pk <= YOURVALUE
 order by pk desc
 limit 11
) union all
(select t.*
 from table t.*
 where pk > YOURVALUE
 order by pk asc
 limit 10
)

order by不应该排序,因为您是按主键排序的。

答案 1 :(得分:0)

我知道没有简单的方式“在值的任一侧获取n行”。关系数据库是基于设置而非基于位置的。

您可以尝试这样的事情:

    SELECT *
    FROM SO25110036 as a
    WHERE 
    a.pk = 11
    OR
    (
     a.pk < 11
     and 3 >= 
      (select count(*)
       from SO25110036 as b
       where b.pk >= a.pk
       and b.pk < 11
       )
     )
    OR
    (
     a.pk > 11
     and 3 >= 
      (select count(*)
       from SO25110036 as c
       where c.pk <= a.pk
       and c.pk > 11
       )
     )
    order by pk
    ;

我在这里实施了一个小提琴:http://sqlfiddle.com/#!7/b4595/4
出于测试目的,它在行的任一侧获得3行,具有11值,以及该行。另外,请尝试不使用ORDER BY

使用sqlite特定语法可能有更好的解决方案,但我不是sqlite用户。