我做了一个案例陈述,基本上是告诉我不同日期不同井的不同区域何时打开/部分打开/关闭。但这只是周期性的变化,所以在状态变化之间有几个空值,我想用以前的状态值继续下去。理想情况下,我希望将其与case语句进行相同的计算,但你显然不能在那里使用循环参数,所以我可以创建一个新列来完成这项工作,但我仍然难以填补空白。
下面是我的数据集的简化版本,"1st"one_answers"2a"列中的当前输出在井下没有任何东西时返回0,如果部分端口,则返回0.5,如果为空白,则返回1。现在,如果当月该井没有变化,我只需要在case语句中返回null。
Well Date Zone In Size In Zone Out Size Out 1st 2a
101 1/2019 2a blank 0
101 2/2019
101 3/2019 2a blank 1
101 4/2019 1st port 0.5
101 5/2019
101 6/2019
101 7/2019 1st port 0
以下是我想要的"1st"one_answers"2a"列的状态。
Well Date Zone In Size In Zone Out Size Out 1st 2a
101 1/2019 2a blank 0 0
101 2/2019 0 0
101 3/2019 2a blank 0 1
101 4/2019 1st port 0.5 1
101 5/2019 0.5 1
101 6/2019 0.5 1
101 7/2019 1st port 0 1
或
Well Date Zone In Size In Zone Out Size Out 1st 2a 1st filled 2a filled
101 1/2019 2a blank 0 0 0
101 2/2019 0 0
101 3/2019 2a blank 1 0 1
101 4/2019 1st port 0.5 0.5 1
101 5/2019 0.5 1
101 6/2019 0.5 1
101 7/2019 1st port 0 0 1
正如我之前所说,我对这些列使用case语句,因为我得到的输入区域/大小数据比我在这里显示的要复杂一些,所以如果必要的话,可以使用辅助的"1st填充"one_answers"2a填充"列。
如果有人想要/需要它,我目前最简单的案例陈述示例如下:
case
when ([Zone In]="1st") and ([Port_Size In]=0) then 1
when ([Zone In]="1st") and ([Port_Size In]!=0) then 0.5
when [Zone Out]="1st" then 0
else NULL
end
(在输入数据中,值为0意味着它被清空,其他任何东西都是端口大小,因此代码与简化数据示例不完全匹配。(
任何人能给我的帮助都将不胜感激!!!如果你需要任何其他信息,请告诉我。
第一次填充时试试这个,2a填充时试试相同的模式:
SN(LastValidBefore([1st](,0(
LastValidBefore取当前值之前的最后一个有效值。SN在没有这样的有效值的地方(在开头(加一个零。
盖亚
我想我想通了!我在"第一次填充"栏中使用了这个。
SN(last([1st]) OVER (Intersect([Well],AllPrevious([Date]))),0)
非常感谢你给盖亚的灵感!