Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据记录之间的数据关系分组_Sql_Sqlite_Group By_Grouping_Having - Fatal编程技术网

Sql 根据记录之间的数据关系分组

Sql 根据记录之间的数据关系分组,sql,sqlite,group-by,grouping,having,Sql,Sqlite,Group By,Grouping,Having,这是我的桌子: ID | startTime | endTime 0 | 1380209017 | 1380470025 1 | 1390480010 | 1390480018 2 | 1390480218 | 1390480888 3 | 1390480999 | 1390490888 其结果如下: count | date 1 | 2013-09-29 3 | 2014-01-23 计数日期 1 | 2013-09-29 3 | 2014-01-23 现在我需要获得每

这是我的桌子:

ID | startTime | endTime 0 | 1380209017 | 1380470025 1 | 1390480010 | 1390480018 2 | 1390480218 | 1390480888 3 | 1390480999 | 1390490888 其结果如下:

count | date 1 | 2013-09-29 3 | 2014-01-23 计数日期 1 | 2013-09-29 3 | 2014-01-23
现在我需要获得每天记录的数量,但是如果不关心间隙,则可以使用自联接轻松访问前一行

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条件的逻辑,它未经测试,我不喜欢自联接,因为每个列都存在两次:-)

id列是连续的,没有间隙吗?然后,您可以在t2.id=t1.id+1上进行自联接,以访问上一行。@dnoeth是,但偶尔会出现间隙。然而,如果合并因缺口而失败,这不是问题。它可以是n个前面的行。好吧,游标对您有好处吗?要求是将n个行程分组,而不仅仅是2个行程,查询的中断将过滤两行之间少于5分钟的所有行。但如果一天内没有行>5分钟->当天没有结果,则该操作将失败。如果没有“窗口聚合函数”(例如行数),这种查询非常困难。您需要处理多少行?大约1000到130000行。但是,如果计算量过大,我可以查询特定的时间范围。因此,最多处理10000行。如果您需要确切的答案,您需要按照PerterRing的建议使用光标。逻辑很简单,按startTime对数据进行排序,然后对每行进行排序:将当前startTime与前一行的EndTime进行比较,如果差值大于5分钟,则将计数器增加1。数据更改时,将发出一行并开始新的计数。我不会写那个,我至少有10年没有写过这样的游标:-) count | date 1 | 2013-09-29 1 | 2014-01-23
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')