问题描述
我的时间序列如下:
Day. Data
1/1/2020. 0
2/1/2020 .2
3/1/2020 0
...... ...
1/2/2020 0
2/2/2020. 0
3/2/2020. .2
4/2/2020. .3
5/2/2020. 0
6/2/2020 0
7/2/2020. 0
8/2/2020 2
9/2/2020 2.4
10/2/2020 3
因此,我希望过滤器数据仅在时间序列中的最终零序列之后显示,在这种情况下,我只希望在8/2/202之后获得数据。 我已经尝试过了
SELECT * FROM table where Data> 0
这是结果:
Day. Data
2/1/2020 .2
...... ...
3/2/2020. .2
4/2/2020. .3
8/2/2020 2
9/2/2020 2.4
10/2/2020 3
我还要在表中按顺序显示最后零个零天后的结果。
Day Data
10/2/2020 3
11/2/2020. 3.5
..... ....
解决方法
一种方法是:
select t.*
from t
where t.day > (select max(t2.day) from t t2 where t2.value = 0);
您可以抵消这一点:
where t.day > (select max(t2.day) + interval '2' day from t t2 where t2.value = 0);
以上假设至少一行具有零。这是两个简单的修复程序:
where t.day > all (select max(t2.day) from t t2 where t2.value = 0);
或:
where t.day > (select coalesce(max(t2.day),'2000-01-01') from t t2 where t2.value = 0);
,
您可以使用窗口功能:
select day,data
from (
select t.*,max(case when data = 0 then day end) over() day0
from mytable t
) t
where day > day0 or day0 is null
order by day0
如果您想在上一个0
之后两天开始,可以很容易地调整它:
select day,max(case when data = 0 then day end) over() day0
from mytable t
) t
where day > day0 + interval '2 day' or day0 is null
order by day0