У меня есть эта таблица, каждая строка жертвуя продажу:Получить Top N строк в день в улье - ранг()
sale_date salesman sale_item_id
20170102 JohnSmith 309
20170102 JohnSmith 292
20170103 AlexHam 93
Я пытаюсь получить 20 лучших продавцов в день, и я придумал это:
SELECT sale_date, salesman, sale_count, row_num
FROM (
SELECT sale_date, salesman,
count(*) as sale_count,
rank() over (partition by sale_date order by sale_count desc) as row_num
from salesforce.sales_data
) T
WHERE sale_date between '20170101' and '20170110'
and row_num <= 20
Но я получаю:
FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns. Also check for circular dependencies.
Underlying error: org.apache.hadoop.hive.ql.parse.SemanticException: Line 5:35 Expression not in GROUP BY key 'sale_date'
Я не уверен, в какой момент группировка вступит в силу, хотя. Может кто-нибудь помочь? Tx!
Спасибо @Gordon - Я получаю ту же ошибку, но с выражением не в GROUP BY key "sale_count '". Алиасы AFAIK не могут использоваться в групповых предложениях, но для этого я добавил его в предложение группы и получил «Недопустимый псевдоним таблицы или ссылку на колонку« sale_count »« – Craig
вам не нужна группа использования с помощью оконных функций. – hlagos
@lake , , , Вы делаете, если рейтинг находится на агрегации. –