Presto SQL - заполнить пропущенные значения в диапазоне с 0 - PullRequest
0 голосов
/ 05 апреля 2020

Вот исходная таблица:

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

Желаемая логика c:

  • Каждый id будет иметь некоторый диапазон.
  • Для каждого id нижний предел диапазона будет отличаться, но верхний предел будет максимальным максимальным значением во всей таблице.
  • Для любых пропущенных значений в обновленном идентификаторе диапазон, это будет вменено с 0

Я не SQL WIS, поэтому я немного потерян. Любая помощь приветствуется. Дайте мне знать, если что-то смущает насчет логики c.

1 Ответ

0 голосов
/ 05 апреля 2020

Если для каждого значения диапазона у вас есть хотя бы одно значение, то я думаю, что вы хотите:

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 = r.range
union all
select id, range, value
from t
where range <= 0;

Как это работает? Первый подзапрос генерирует все комбинации идентификаторов и значений диапазона, где значение диапазона больше 0. Для этого используется декартово произведение различных значений id и range.

* LEFT JOIN затем вводит существующие данные. И последний подзапрос вводит детрит - значения меньше 0.

...