【问题标题】:SQL Informix advanced querySQL Informix 高级查询
【发布时间】:2021-02-11 18:31:48
【问题描述】:

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

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

  1. 我有一个id,它在stage-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 的转换。

【问题讨论】:

    标签: sql select window-functions informix


    【解决方案1】:

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

    这会将所有至少有一次从-1 转换为1ids。

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 2018-01-21
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多