Presto SQL-用0填写范围内的缺失值

问题描述 投票:0回答:1

这是初始表:

id range val
1  -4.   2
1  -2.   1
1. 1.    1
1  3.    2
1  4.    1
2. -1.   1
2. 0.    1
2. 1.    1

更新表:

id range val
1  -4.   2
1. -3.   0
1  -2.   1
1. -1.   0
1. 0.    0
1. 1.    1
1. 2.    0
1  3.    2
1  4.    1
2. -1.   1
2. 0.    1
2. 1.    1
2. 2.    0
2  3.    0
2  4.    0

所需逻辑:

  • 每个id将有一定范围。
  • 对于每个id,范围的下端将有所不同,但上端将是整个表中的最大最大值。
  • 对于该ID的更新范围内的任何缺失值,将使用0估算

我不是SQL wiz,所以我有点迷路。任何帮助将非常感激。让我知道是否对逻辑感到困惑。

sql presto
1个回答
0
投票

如果对于每个范围值,您至少有一个值,那么我认为您想要:

select i.id, t.range, coalesce(t.value, 0) as value
from (select distinct id from t) i cross join
     (select distinct range from t where range > 0) r left join
     t
     on t.id = i.id and t.range = i.range
union all
select id, range, value
from t
where range <= 0;
© www.soinside.com 2019 - 2024. All rights reserved.