没有ID的SQLite中两个独立行之间的日期差

时间:2018-09-07 08:32:12

标签: sqlite

我在SQLite中有这样的数据(几千行):

1536074432|startRecording
1536074434|stopRecording
1536074443|startRecording
1536074447|stopRecording
1536074458|startRecording
1536074462|stopRecording

我想获得两个连续的独立事件之间经过的秒数(基本上是我录制的视频秒数)。

我知道另一个类似的问题( Date Difference between consecutive rows),但是在我的情况下是不同的,因为我无法通过ID获得“下一个”行,但必须基于不同的事件名称来获得它。

有一个神奇的答案,但这是特定于SQL Server(Query to find the time difference between successive events)的,而SQLite则需要此答案。

我可以使用LAG / LEAD函数在Oracle中执行此操作,但是不知道如何在SQLite中执行此操作。

我也可以使用单独的解析脚本来执行此操作,但是我认为直接从查询中执行此操作会更有效。

1 个答案:

答案 0 :(得分:2)

即使表中没有id,sqlite也会存储一个rowid(from sqlite CREATE_TABLE doc):

  

ROWID和INTEGER PRIMARY KEY
  除WITHOUT ROWID表外,SQLite表中的所有行均具有一个64位带符号整数键,该键唯一地标识其表中的行。该整数通常称为“ rowid”。可以使用与大小写无关的特殊名称之一“ rowid”,“ oid”或“ rowid ”代替列名来访问rowid值。如果表包含用户定义的名为“ rowid”,“ oid”或“ rowid ”的列,则该名称始终引用显式声明的列,并且不能用于检索整数rowid值。

假设所描述的数据非常干净:)怎么样:

select a.rowid,a.time,a.event,b.rowid,b.time,b.event,b.time - a.time as elapsed --,sum(b.time-a.time)
from t2 a, t2 b
where a.rowid % 2 = 1
and b.rowid = a.rowid + 1