SQL Informix 高级查询

SQL Informix advanced query

让我试着解释一下我想用我的数据做什么。我的数据结构如下:

我有 3 列:dateidstage。阶段可以是不同的数字,但我有兴趣展示一些 id 从 stage -1stage 1 的特定过渡。请看下面的例子。

  1. 我有一个 idstage -1,然后过渡到舞台 1,然后回到舞台 -1 稍后。每当从 -1 过渡到 1 时,我都希望 id.

  2. 在这里,我从-1过渡到3,这不是我感兴趣的。

  3. 到这里,转场了,这个id就是我要展示的

  4. 在这里,我们从1过渡到-1,这不是我想要的。

数据:

    #1   date            id                     stage
        2018-12-31      520000000001354292      -1
        2019-09-30      520000000001354292       1
        2019-12-31      520000000001354292      -1
    
    
    #2  2018-12-31      520000000001435675      -1
        2019-03-31      520000000001435675      -1
        2019-06-30      520000000001435675       3
        
        
    #3  2018-12-31      520000000003156164      -1
        2019-03-31      520000000003156164      -1
        2018-12-31      520000000003161014      -1
        2019-03-31      520000000003161014       1


   #4  2018-12-31       520500000002472437      1
       2019-03-31       520500000002472437     -1
       2019-06-30       520500000002472437     -1
       2019-09-30       520500000002472437      2

我想要的输出是:

520000000001354292    
520000000003156164 

我希望我已经解释清楚了。

此外,在此之后,我想显示从 -11stage 3.

的过渡

您可以使用 lag():

select distinct id
from (
    select t.*, lag(stage) over(partition by id order by date) lag_stage
    from mytable t
) t
where lag_stage = -1 and stage = 1

这会带来所有至少有一个从 -11 的转换的 id

Also, after this, i want to show transition from either -1 and 1 to stage 3.

您也可以轻松调整查询以适应该用例。只需将最后的 where 子句更改为:

where lag_stage in (-1, 1) and stage = 3