РЕДАКТИРОВАТЬ : добавлена ссылка на Fiddle для более полного образца (фактический набор данных)
Интересно, возможно ли приведенное ниже в SQL
, в BigQuery
в частности, и в одном операторе SELECT
.
Рассмотрим следующий ввод:
Key | Value
-----|-------
a | 2
a | 3
b | 2
b | 3
b | 5
c | 2
c | 5
c | 7
Логика: выберите наименьшее значение «доступно» для каждой клавиши.Доступное значение еще не назначено / не использовано.См. Ниже.
Key | Value | Rule
-----|-------|--------------------------------------------
a | 2 | keep
a | 3 | ignore because key "a" has a value already
b | 2 | ignore because value "2" was already used
b | 3 | keep
b | 5 | ignore because key "b" has a value already
c | 2 | ignore because value "2" was already used
c | 5 | keep
c | 7 | ignore because key "c" has a value already
Отсюда ожидаемый результат:
Key | Value
-----|-------
a | 2
b | 3
c | 5
Здесь SQL для создания фиктивной таблицы:
with t as ( select
'a' key, 2 value UNION ALL select 'a', 3
UNION ALL select 'b', 2 UNION ALL select 'b', 3 UNION ALL select 'b', 5
UNION ALL select 'c', 2 UNION ALL select 'c', 5 UNION ALL select 'c', 7
)
select * from t
EDIT : здесь другой набор данных
Не уверен, какую комбинацию функций FULL JOIN
, DISTINCT
, ARRAY
или WINDOW
я могу использовать.
Любое руководство приветствуется.