Greoupby с условием Max () SQL Teradata

#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