4

次の形式の単純なテーブルがあるとします。

<timestamp> <state (A or B)>

シリーズが状態 A から状態 B に遷移するとき (つまり、X t = B && X t-1 = A)を常に選択できるようにしたいと考えています。たとえば、次のデータを使用します。

00:00 A
00:01 A
00:02 B
00:03 B
00:04 B
00:05 B
00:06 A
00:07 B
00:08 B

戻りたいと思い00:02ます00:07

間違ったキーワードを検索しているのかもしれませんが、同様の問題の良い例が見つかりません。PostgreSQL でこれにどのようにアプローチできますか?

4

2 に答える 2

3

単一の時系列

SELECT ts
FROM  (
   SELECT *, lag(state) OVER (ORDER BY ts) AS last_state
   FROM   tbl
   ) sub
WHERE  state = 'B'
AND    last_state = 'A'
ORDER  BY ts;          -- I assume you want ordered results

@Denis はすでにいくつかのリンクを提供しています。

複数の時系列

...によって識別されますtimeseries_id(コメントへの回答):

SELECT timeseries_id, ts
FROM  (
   SELECT *, lag(state) OVER (PARTITION BY timeseries_id
                              ORDER BY ts) AS last_state
   FROM   tbl
   ) sub
WHERE  state = 'B'
AND    last_state = 'A'
ORDER  BY timeseries_id, ts;
于 2013-10-10T23:18:51.477 に答える