首页 > 解决方案 > SQL Informix 高级查询

问题描述

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

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

  1. 我有一个idin stage -1,然后过渡到 stage 1,然后又回到 stage -1。每当从-1to过渡时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 

我希望我解释得足够清楚。

另外,在此之后,我想显示从-11到 的过渡stage 3

标签: sqlselectwindow-functionsinformix

解决方案


你可以使用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

这会带来所有id至少有一个从-1到过渡的 s 1

此外,在此之后,我想展示从 -1 和 1 到第 3 阶段的过渡。

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

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

推荐阅读