在同一列的行之间应用条件
Apply condition between rows of the same column
我有一个 table,其中第一列是时间,以 1 秒为增量增加。
第二列在第一行中显示了当天开始的代码。这可以是 1-5 之间的任何一个。 0(零)值表示代码未更改。当代码更改时,会显示更改的时间以及更改为哪个数字(因此,事件),但只要它保持不变,就会再次显示 0(零)。
我的意图是创建一个新列,随时指定当前代码。到目前为止,我一直在Excel中这样做,条件和结果如下:
有没有办法在查询中应用这个 Excel 条件来创建这个新列?
我一直在测试 CASE WHEN 语句,并尝试在其中实现 Lag 或 Lead 函数。但到目前为止,当事件为 0(零)时,他们中的 none 努力应用与前一行相同的值。
如果event
一直在增加,你可以使用window max()
:
select time, event, max(event) over(order by time) code
from mytable
否则,它有点复杂。一种选择是使用 window 总和来构建组:
select time, event, max(event) over(partition by grp order by time) code
from (
select
t.*,
sum(case when event > 0 then 1 else 0 end) over(order by time) grp
from mytable t
) t
我有一个 table,其中第一列是时间,以 1 秒为增量增加。 第二列在第一行中显示了当天开始的代码。这可以是 1-5 之间的任何一个。 0(零)值表示代码未更改。当代码更改时,会显示更改的时间以及更改为哪个数字(因此,事件),但只要它保持不变,就会再次显示 0(零)。
我的意图是创建一个新列,随时指定当前代码。到目前为止,我一直在Excel中这样做,条件和结果如下:
有没有办法在查询中应用这个 Excel 条件来创建这个新列? 我一直在测试 CASE WHEN 语句,并尝试在其中实现 Lag 或 Lead 函数。但到目前为止,当事件为 0(零)时,他们中的 none 努力应用与前一行相同的值。
如果event
一直在增加,你可以使用window max()
:
select time, event, max(event) over(order by time) code
from mytable
否则,它有点复杂。一种选择是使用 window 总和来构建组:
select time, event, max(event) over(partition by grp order by time) code
from (
select
t.*,
sum(case when event > 0 then 1 else 0 end) over(order by time) grp
from mytable t
) t