SQL Informix 高级查询
SQL Informix advanced query
让我试着解释一下我想用我的数据做什么。我的数据结构如下:
我有 3 列:date
、id
和 stage
。阶段可以是不同的数字,但我有兴趣展示一些 id 从 stage
-1
到 stage
1
的特定过渡。请看下面的例子。
我有一个 id
在 stage
-1
,然后过渡到舞台 1
,然后回到舞台 -1
稍后。每当从 -1
过渡到 1
时,我都希望 id
.
在这里,我从-1
过渡到3
,这不是我感兴趣的。
到这里,转场了,这个id
就是我要展示的
在这里,我们从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
我希望我已经解释清楚了。
此外,在此之后,我想显示从 -1
和 1
到 stage
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
这会带来所有至少有一个从 -1
到 1
的转换的 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
让我试着解释一下我想用我的数据做什么。我的数据结构如下:
我有 3 列:date
、id
和 stage
。阶段可以是不同的数字,但我有兴趣展示一些 id 从 stage
-1
到 stage
1
的特定过渡。请看下面的例子。
我有一个
id
在stage
-1
,然后过渡到舞台1
,然后回到舞台-1
稍后。每当从-1
过渡到1
时,我都希望id
.在这里,我从
-1
过渡到3
,这不是我感兴趣的。到这里,转场了,这个
id
就是我要展示的在这里,我们从
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
我希望我已经解释清楚了。
此外,在此之后,我想显示从 -1
和 1
到 stage
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
这会带来所有至少有一个从 -1
到 1
的转换的 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