在数据库查询中返回我的选择参数(“周围行”)周围的行

时间:2011-12-07 02:01:05

标签: android sql sqlite android-cursorloader

我在Android中查询数据库。该表是您的普通表,其中没有任何特殊值。

我需要的是:返回在给定时间戳之前和之后发生的两个事件。

示例:假设我有下表,我的选择是1332200003002:

_id |    Time       | Value
   ...    ...
n   | 1332200002000 | 145
n+1 | 1332200003001 | 98 (this is <= selection)
   (1332200003002 is here, between those two)
n+2 | 1332200004000 | 90 (this is > selection)
n+3 | 1332200005000 | 100
n+4 | 1332200005001 | 280

所以,如果我的选择是1332200003001或1332200003002 ...我希望返回的行是 n + 1 n + 2 ,所以我可以看出Value从98变为90。

我正在使用的是CursorLoader,所以它最好适合其通常的调用。

我的代码大小谢谢你!


作为旁注,我可以猜测BETWEEN的安全值( IS 已经工作),然后迭代Java中剩下的少量Cursor行用于查明我需要的两行。然而,在我看来,这似乎是一个非常普遍的需求,因此这个问题。使用Cursor进行所有通常的保险杠测试似乎是浪费在Java中完成的。

1 个答案:

答案 0 :(得分:0)

SELECT *
FROM myTable LIMIT 2
OFFSET
  (SELECT _id
   FROM myTable
   WHERE time<=1332200003002
   ORDER BY time DESC LIMIT 1) - 1;

这是做什么的:

从表格中选择2个条目。第一个条目的偏移量选择如下:

选择time <= 1332200003002的最新行,并计算第一行的偏移量。

如果您的-1值从1开始而不是0,则需要最后_id。(根据需要更改此值,将_id值转换为从零开始的偏移量。 )