#sql #teradata #greatest-n-per-group #window-functions #alation
#sql #teradata #наибольшее число пользователей на группу #окно-функции #вдохновение #изменение
Вопрос:
Мне нужно сгруппировать с помощью функции и возвращать только строки, которые имеют максимальное значение для каждой переменной, которую я выбираю. В этом случае переменными являются user_id и task.
Мой вклад показан в таблице ниже:
user_id task mx
123456 expecd 4.85
789101 Packing 3.17
123456 Packing 1.50
789101 receiv 0.08
И я применяю приведенный ниже запрос.
select user_id, task, max(time_sum) as mx
from process
group by user_id,task) with data on commit preserve rows;
Но это не работает, чтобы получить мою цель, которая является таблицей ниже.
user_id task mx
123456 expecd 4.85
789101 Packing 3.17
Не могли бы вы, пожалуйста, подсказать мне, как найти решение?
Ответ №1:
Вам нужна строка с наибольшим значением mx
для каждого user_id
.
В Teradata вы можете использовать row_number()
и qualify
для решения этой проблемы с наибольшим числом n на группу.
select t.*
from mytable t
qualify row_number() over(partition by user_id order by mx desc) = 1