2014-01-23 48 views
1

这之间的数据关系是我的表:集团通过基于记录

 
ID | startTime | endTime 
0 | 1380209017 | 1380470025 
1 | 1390480010 | 1390480018 
2 | 1390480218 | 1390480888 
3 | 1390480999 | 1390490888 

现在我做下面让每天

SELECT 
count(date(tripStartTime,'unixepoch')) AS count, 
date(tripStartTime,'unixepoch') AS date 
FROM TripsCalculated 
GROUP BY date(tripStartTime,'unixepoch') 

导致这样的事情的记录数:

 
count | date 
1 | 2013-09-29 
3 | 2014-01-23 

现在我需要每天记录数,但记录是<相隔5分钟应算作一个得到

 
count | date 
1 | 2013-09-29 
1 | 2014-01-23 

我可以使用SQLite实现吗?怎么样?顺便说一下,我的平台是Android。

+0

两次对* ID *列顺序没有差距?然后,您可以在t2.id = t1.id + 1 *上进行自我连接*以访问前一行。 – dnoeth

+0

@dnoeth是的,但差距偶尔会发生。但是,如果由于缺口而合并失败,这不是问题。它可以是前n行。 – OneWorld

+0

那么,光标对你有好处? – PeterRing

回答

0

如果您不关心间隙,可以使用自连接轻松访问上一行。

SELECT 
    COUNT(*) AS COUNT, 
    tripStartTime AS DATE 
FROM 
(
    SELECT DATE(tripStartTime,'unixepoch') AS tripStartTime 
    FROM TripsCalculated AS t1 LEFT JOIN TripsCalculated AS t2 
    ON t2.id = t1.id+1 
    WHERE t2.tripStartTime - t1.tripEndTime > 5*60 
) 
GROUP BY DATE(tripStartTime,'unixepoch') 

检查WHERE条件的逻辑,这是未经测试,我不喜欢自我任命为每列存在:-)

+0

要求是将n次旅行分组,不止2次,中间间隔<5分钟。我现在删除了我的问题的误导部分。 – OneWorld

+0

该查询将过滤2行之间少于5分钟的所有**行。但是如果在一天内没有大于5分钟的行,它将会失败 - >当天没有结果。没有“窗口集合函数”(例如ROW_NUMBER),这种查询确实很难。你需要处理多少行? – dnoeth

+0

大约有1000到130000行。但是,如果计算过重,我可以对特定时间段进行查询。这样最多可以处理10000行。 – OneWorld