0

開始/停止のタイムスタンプを含むsqliteテーブルがあります。そこからの合計経過時間を返すクエリを作成したいと思います。

現在、SELECT t,type FROM event WHERE t>0 AND (name='start' or name='stop) and eventId=xxx ORDER BY t次のようなテーブルを返すSELECT(例)があります。

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

上記の例で合計経過時間を生成するには、次のようにします。(20-1)+(150-100) = 69

私が持っていたアイデアの1つは、2つの別々のクエリを実行できます。1つは「開始」フィールド用、もう1つは「停止」フィールド用です。

+---+---+
|(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

そうすれば、違いを合計するのは簡単です(私は思います!)。唯一の問題は、次のように2つの別々のクエリを結合できるかどうかわからないことです。すべての行を他のすべての行と結合し、いくつかの基準に一致しないものを削除する結合に精通しています。この場合、基準は行インデックスが同じであるということですが、これはデータベースフィールドではなく、2つの別々の選択の出力で結果として得られる行の順序です-使用できるデータベースフィールドはありませんこれを決定します。

または、おそらくこれを行う他の方法がありますか?

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 に答える