0

我有一个包含开始/停止时间戳的 sqlite 表。我想创建一个从那里返回总经过时间的查询。

现在我有一个 SELECT (例如SELECT t,type FROM event WHERE t>0 AND (name='start' or name='stop) and eventId=xxx ORDER BY t),它返回一个看起来像这样的表:

+---+-----+
|t  |type |
+---+-----+
|  1|start|
| 20|stop |
|100|start|
|150|stop |
+---+-----+

在上述示例中生成总经过时间将通过以下方式完成(20-1)+(150-100) = 69

我的一个想法是:我可以运行两个单独的查询,一个用于“开始”字段,一个用于“停止”字段,假设它们总是像这样排列:

+---+---+
|(1)|(2)|
+---+---+
|  1| 20|
|100|150|
+---+---+

(1) SELECT t FROM EVENT where name='start' ORDER BY t
(2) SELECT t FROM EVENT where name='stop' ORDER BY t

然后将差异相加很简单(我认为!)。唯一的问题是,我不知道我是否可以像这样连接两个单独的查询:我熟悉将每一行与其他行结合起来的连接,然后消除那些不符合某些条件的连接。在这种情况下,标准是行索引相同,但这不是数据库字段,它是两个单独选择的输出中结果行的顺序 - 我没有任何数据库字段可以用来确定这一点。

或者也许还有其他方法可以做到这一点?

4

1 回答 1

1

我不使用 SQLite,但这可能有效。让我知道。

SELECT SUM(CASE WHEN type = 'stop' THEN t ELSE -t END) FROM event

这假设 type 中的唯一值是 start/stop。

于 2013-02-18T00:06:29.703 回答