Удалите все дубликаты, кроме последнего появления в SQL-запросе большого запроса на основе двух столбцов - PullRequest
0 голосов
/ 26 сентября 2019

Если у меня в большом запросе таблица, содержащая следующее

fruit   color   quantity   age   other_field
apple   red      3         1      foo
grapes  green    5         1      young
apple   green    1         3      word
apple   red      4         5      bar

Как бы удалить все строки, кроме последнего, содержащего столбец с одинаковыми фруктами и цветами, чтобы моя таблица выглядела следующим образом

fruit   color   quantity   age   other_field
grapes  green    5         1      young
apple   green    1         3      word
apple   red      4         5      bar

По сути, для каждой уникальной пары фруктов и цветов в едином большом запросе нужно хранить по одной строке стандартного sql?

1 Ответ

1 голос
/ 26 сентября 2019

Ниже для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'apple' fruit, 'red' color, 3 quantity, 1 age, 'foo' other_field UNION ALL
  SELECT 'grapes', 'green', 5, 1, 'young' UNION ALL
  SELECT 'apple', 'green', 1, 3, 'word' UNION ALL
  SELECT 'apple', 'red', 4, 5, 'bar' 
)
SELECT fruit, color, 
  ARRAY_AGG(STRUCT(quantity, age, other_field) ORDER BY age DESC LIMIT 1)[OFFSET(0)].*
FROM `project.dataset.table` t
GROUP BY fruit, color   

с результатом

Row fruit   color   quantity    age other_field  
1   apple   red     4           5   bar  
2   grapes  green   5           1   young    
3   apple   green   1           3   word     

Другая версия того же:

#standardSQL
SELECT AS VALUE
  ARRAY_AGG(t ORDER BY age DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY fruit, color

с тем же результатом ...но, очевидно, мне больше нравится эта версия: о)

...