意外行为前的配置单元行

rdrgkggo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(315)

考虑到这个极其简单的数据集:

+--------+-----+
| Bucket | Foo |
+--------+-----+
|      1 | A   |
|      1 | B   |
|      1 | C   |
|      1 | D   |
+--------+-----+

我想在前一行中看到foo的值:

select
foo,
max(foo) over (partition by bucket order by foo rows between 1 preceding and 1 preceding) as prev_foo
from
...

这给了我:

+--------+-----+----------+
| Bucket | Foo | Prev_Foo |
+--------+-----+----------+
|      1 | A   | A        |
|      1 | B   | A        |
|      1 | C   | B        |
|      1 | D   | C        |
+--------+-----+----------+

为什么我第一排就得a?我希望它是空的。在我寻找空值的地方,它会抛开计算。我可以通过扔一个 row_number() 在那里,但我更喜欢用较少的计算。

7dl7o3gd

7dl7o3gd1#

使用lag函数获取上一行:

LAG(foo) OVER(partition by bucket order by foo) as Prev_Foo

相关问题