【问题标题】:Time Series Data - find times of state transition时间序列数据 - 查找状态转换的时间
【发布时间】:2013-10-18 21:51:01
【问题描述】:

假设我有一个简单的表格:

<timestamp> <state (A or B)>

我希望能够选择系列从状态 A 转换到状态 B 的所有时间(即 Xt = B && Xt-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:0200:07

也许我搜索了错误的关键字,但我找不到任何类似问题的好例子。我该如何使用 PostgreSQL 来解决这个问题?

【问题讨论】:

    标签: sql database postgresql time-series window-functions


    【解决方案1】:
    【解决方案2】:

    单一时间序列

    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 already provided some links.

    多个时间序列

    ...由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;

    【讨论】:

    • 谢谢!继续问题:如果多个时间序列在同一个表中怎么办。架构现在是 &lt;timestamp&gt; &lt;timeseries_id&gt; &lt;state&gt;。如何找到每个系列的过渡时间?
    • @user593062:我添加了另一个答案。为一个新问题开始一个新问题。您可以随时链接到这个以获取上下文。
    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多