как выбрать минимальное значение из таблицы, если таблица имеет два уникальных значения с остальными столбцами идентичны - PullRequest
0 голосов
/ 11 февраля 2019

ex: Ввод

ID   Col1   Col2   Col3
--   ----   ----   ----
1       a     a     sql  
2       a     a    hive

Out put

ID   Col1   Col2   Col3
--   ----   ----   ----
1       a     a     sql  

Здесь мое значение идентификатора и значения Col3 уникальны, но мне нужно отфильтровать минимальный идентификатор и заполнить все записи.

Я знаю, что следующий подход будет работать, но любой лучший подход, кроме этого, пожалуйста, предложите

выбрать Col1, Col2, min (ID) из группы таблиц по Col1, Col2;

иприсоединитесь к этому на ID, Col1, Col2

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Похоже, что Hive поддерживает ROW_NUMBER.Хотя я никогда не использовал hive, другие rdbms использовали бы его таким образом, чтобы получить все содержимое строки min без необходимости присоединения (без проблем при повторных минимальных значениях)

SELECT a.* FROM 
(
  SELECT *, ROW_NUMBER() OVER(ORDER BY id) rn FROM yourtable
) a
WHERE a.rn = 1

Внутренний запрос выбирает все данные таблицы и устанавливает счетчик приращений в порядке идентификатора.Он может быть основан на любом столбце, минимальный идентификатор (в данном случае) - номер строки 1. Если вы хотите максимум, order by ID desc
Если вы хотите, чтобы число перезапускалось для других значений другого столбца (например, из десяти).из вашего Col3 были «sql», а в двадцати строках был «hive») вы скажете PARTITION BY col3 ORDER BY id, и номер строки будет счетчиком, который будет увеличиваться для идентичных значений col3, начиная с 1 для каждого отдельного значения col3

0 голосов
/ 11 февраля 2019

Я думаю, что вы хотите row_number():

select t.*
from (select t.*, row_number() over (partition by col1, col2 order by id) as seqnum
      from t
     ) t
where seqnum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...