2017-02-12 17 views
1

Работа в улье, у меня есть таблица с тремя столбцами A (INT), B (STRING) и C (STRING). B & C столбцы имеют повторяющиеся парные значения (т.е. строка 1 & строка 10 может иметь одинаковые строки в столбцах B & C). Я пытаюсь вернуть полные строки (то есть A, B, C) различных пар B, C, где столбец A находится в максимальном значении среди всех вхождений отдельных пар B, C. Вся помощь приветствуется.Выберите три столбца (A, B, C) и верните строки, где (B, C) являются отличными, а A - максимальным значением, так как существует несколько вхождений пар (B, C)

Пример ввода таблицы

Col1 Col2 Col3 
---------------- 
1111, str1, str2 
2222, str1, str2 
3333, str3, str4 
4444, str5, str6 
5555, str3, str4 
6666, str5, str6 

Пример вывода из запроса

Col1 Col2 Col3 
---------------- 
2222, str1, str2 
5555, str3, str4 
6666, str5, str6 

ответ

2

Если вы хотите только три столбца в результате:

select max(a) a, b, c 
from your_table 
group by b, c; 

Если у вас есть дополнительные столбцы выберите, вы можете использовать функцию окна row_number для этого:

select * 
from (
    select t.*, 
     row_number() over (
      partition by b, c 
      order by a desc nulls last 
      ) rn 
    from your_table t 
    ) t 
where rn = 1; 
+0

Я использовал первое, более простое предложение. Сократите таблицу из строк 54M с повторами до уникальных строк 1.6M. Второе предложение получило NULLS. Я проверяю таблицу ввода, и нет никаких NULLS в любых столбцах. Спасибо @GurV – WhyNot