Я изучаю Hive и хочу написать оптимизированный запрос HiveQL/SQL.
Моя таблица выглядит так:
CREATE TABLE sales (dealer VARCHAR(25), make VARCHAR(25), type VARCHAR(25), day INT);
INSERT INTO sales (dealer, make, type, day) VALUES
("Xyz", "Highlander", "SUV", "0"),
("Xyz", "Prius", "HATCH", "1"),
("Xyz", "Prius", "HATCH", "2"),
("Xyz", "Prius", "HATCH", "3"),
("Xyz", "Versa", "HATCH", "1"),
("Xyz", "Versa", "HATCH", "2"),
("Xyz", "Versa", "HATCH", "3"),
("Xyz", "S3", "SEDAN", "1"),
("Xyz", "S3", "SEDAN", "2"),
("Abc", "Forrester", "SUV", "1");
Имея "дилера" D, я хочу вычислить максимальное N "производство" для каждого "типа" за последние X дней, в один запрос.
SELECT dealer, make, type, COUNT(*) AS frequency FROM sales
WHERE day > 0 AND dealer LIKE 'Xyz' GROUP BY make, type
ORDER BY frequency DESC LIMIT 5
Проблема в том, что при использовании GROUP BY для «make» и «type» для top 1 я получу только:
DEALER, MAKE, TYPE, COUNT
Xyz, Prius, Hatch, 3
Xyz, Versa, Hatch, 3
Xyz, S3, Sedan, 2
...
Но я хочу
Xyz, Prius, Hatch, 3
Xyz, S3, Sedan, 2
...
для КАЖДЫЙ "введите" верхний N.
Может ли кто-нибудь помочь мне понять, как написать такой запрос?
Скрипт SQL http://sqlfiddle.com/#!2/df9304 /5а>
****Обновлять****
Похоже, rank() был бы полезен:
Hive получает первые n записей в группе по запросу
xyz, versa, hatch, 3
не включен в этот список? - person gobrewers14   schedule 25.08.2014