SQLITE仅使用WHERE返回匹配的连续行

时间:2014-12-08 15:25:17

标签: android sqlite

我的Android sqlite db有两个字段加上_id,我正在寻找包含这个的SQL查询:

SELECT COUNT(*) from table WHERE datetime>? AND datetime<? AND value=1 ORDER BY datetime ASC

但只返回行或计数值= 1,连续4分钟

datetime                value
...
2014-11-21 11:00:00     0
2014-11-21 11:01:00     0
2014-11-21 11:02:00     1
2014-11-21 11:03:00     1
2014-11-21 11:04:00     0
2014-11-21 12:05:00     0
2014-11-21 11:06:00     1
2014-11-21 11:07:00     1
2014-11-21 11:08:00     1
2014-11-21 11:09:00     1
2014-11-21 11:10:00     0
...

使用上面的示例数据,它应该只返回4个连续的4个行,而不是全部6个,其中value = 1:

2014-11-21 11:06:00     1
2014-11-21 11:07:00     1
2014-11-21 11:08:00     1
2014-11-21 11:09:00     1

这是可能的SQL和两个字段,如果是这样的任何线索,如何?

(如果它有任何不同,我的日期时间数据被保持为很长的毫秒数)

1 个答案:

答案 0 :(得分:1)

我花了一些时间思考可爱的方式来完成你的任务。我不认为有效的方法可以作为查询 所以我认为你应该回到原来很好的光标并像这样做(我相信这将是最快和最简单的方式):

SELECT * from table WHERE value=1 ORDER BY datetime

然后运行获取的记录(伪代码):

int count=0;
int intervalLen=0;

if (move to first) 
do {
  if(get(value)==1){
    if(intervalLen==4)
      count++;
    intervalLen++;

  } else 
    intervalLen=0;

} while (move to next)

注意它计算不间断的值= 1并且连续不少于4个记录。
如果你必须考虑确切的时间,你应该稍微改变一下