【问题标题】:Date difference between two separate rows in SQLite with no IDSQLite 中没有 ID 的两个单独行之间的日期差异
【发布时间】:2019-02-12 13:41:30
【问题描述】:

我在 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。

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

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

【问题讨论】:

  • 即将发布的 Sqlite 3.25 版本将有窗口函数,所以如果你可以等待......

标签: sqlite


【解决方案1】:

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

ROWID 和整数主键
除了 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

【讨论】:

  • 谢谢我用这个答案来执行时间差和电力的求和
猜你喜欢
  • 2010-09-22
  • 2018-10-15
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2016-01-15
相关资源
最近更新 更多