1

我正在查询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+1n+2,这样我就可以看到Value从 98 到 90。

我使用的是 a CursorLoader,因此它必须最好适合其通常的调用。

我的代码大小谢谢你!


作为旁注,我可以BETWEEN猜测(它已经工作)的安全值,然后迭代CursorJava 中剩余的几行以查明我需要的两行。但是,在我看来,这似乎是一种非常普遍的需求,因此提出了这个问题。在 Java 中使用所有我们需要使用 Cursor 进行的常见缓冲测试似乎是一种浪费。

4

1 回答 1

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

这是做什么的:

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

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

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

于 2011-12-07T09:53:58.540 回答