我在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中执行此操作。
我也可以使用单独的解析脚本来完成此操作,但我认为能够直接从查询中执行此操作会更有效。
即使表中没有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