【发布时间】:2022-01-24 22:24:46
【问题描述】:
我在 Presto sql 中尝试解决以下问题已有一段时间了,但似乎没有任何方法有效。
假设我的下表有两列。 X 和 Y。 输出是我想要的。
X Y Output
dummy 1 1
dummy 2 1
dummy 3 3
dummy 4 3
dummy 5 5
逻辑是,我将第一行的 Y 值设置为 start 并向前看,如果所有后续行都在 start + 2 范围内,那么我将第一行值分配为输出,否则我更新 start值与当前行的 Y 值。
例如,我们的初始起始值为 1,因为第一行和第二行的值小于 3 (start + 2),因此我们为输出分配值 1,但由于 3 不在条件范围内,因此起始值更新为3.
在 presto sql 中甚至可能吗?是否有针对此问题的可扩展解决方法?
【问题讨论】:
-
您如何知道各个行的顺序?我想你需要某种索引列吗?
-
@Aldert 顺序由 Y 列决定。与Y列的升序相同,随机打断。
-
尽管如此,您仍将其视为 Excel 工作表。为什么 Y=1 是您计算的开始?如果我以2作为开始,结果就不同了..
-
所以第一步是按Y asc排序。如果我们这样做,计算的开始和输出是固定的。
标签: sql algorithm hiveql presto