2016-03-24 33 views
0

嗨有一个安全摄像机,记录在连续模式。它将记录的记录保存到一个sqlite数据库文件中,记录到几个不同的文件中。我试图在录音中找到时间差距。问题是某些记录事件重叠,所以我不能简单地找到开始时间和停止时间之间的时间差。这是我目前使用的查询:查找时间记录差距

select b.id, datetime(b.starttime, "-8 Hour") as starttime, datetime(b.stoptime, "-8 Hour") as endtime, b.recording_id 
from blocks b, recordings a 
where b.recording_id = a.id and a.recording_type_id = 1 order by b.starttime asc 

下面是从查询的摘录,我排序开始时间:

+------------------------------------------------------------+ 
| id starttime   endtime    recording_id | 
+------------------------------------------------------------+ 
| ---- ------------------- ------------------- ------------ | 
| 6824 2016-03-22 12:32:48 2016-03-22 12:38:08 389   | 
| 6825 2016-03-22 12:38:08 2016-03-22 12:43:28 389   | 
| 6826 2016-03-22 12:39:00 2016-03-22 12:41:10 418   | 
| 6827 2016-03-22 12:43:28 2016-03-22 12:48:48 389   | 
| 6828 2016-03-22 12:48:48 2016-03-22 12:54:08 389   | 
| 6829 2016-03-22 12:54:08 2016-03-22 12:59:28 389   | 
+------------------------------------------------------------+ 

我从ID 6826的时间间隔,以ID 6827,其实当没有一个。 ID 6825排队ID 6827.

任何想法如何使这项工作。我考虑每天每秒钟敲击以测试它是否处于任何时间之间,并创建一条记录,但这只是残酷的。

+2

在您的问题中添加您的查询,以便我们进行调试。这听起来像你没有在你的逻辑中考虑Recording_Id。 –

+0

也许是这样的情况,但我仍然看到一种情况,那里会有重叠的时间。如果我作为例子创建一个子查询,首先按recording_id排序,我以后如何整理它。我仍然有重叠处理。 – WillemB

+0

尝试查找在所有可用分段中找不到的“停止时间”值: – Stavr00

回答

0

这是一个有趣的问题。 :-)

Select a.starTime as 'Coverage Gap Closed' 
    From TableName a 
    Inner Join TableName b 
    On a.startTime between b.startTime and b.endTime 
     And a.PrimaryKey != b.PrimaryKey 

这将标识您拥有的在另一个记录的时间范围内未启动的任何记录,因此表示覆盖差距的结束。

我将它留给学生调整此找到:

  • 全部覆盖的开始时间。
  • 全部覆盖的结束时间。
  • 差距的开始和结束时间。