#sql #oracle #datetime #window-functions
#sql #Oracle #дата-время #окно-функции
Вопрос:
У меня есть таблицы, подобные приведенным ниже.
table
product customer surrender_date
A a 2020/5/1
B a 2020/6/1
C b 2019/7/1
D b 2020/8/1
E b 2020/9/1
Сначала я хотел бы group
с помощью customer
product customer surrender_date
A a 2020/5/1
B a 2020/6/1
Во-вторых, я хотел бы rank
сослаться на surrender_date
из newest
одного
Мой желаемый результат выглядит следующим образом
product customer surrender_date rank
A a 2020/5/1 2
B a 2020/6/1 1
Поэтому весь мой желаемый результат следующий.
product customer surrender_date rank
A a 2020/5/1 2
B a 2020/6/1 1
C b 2019/7/1 3
D b 2020/8/1 2
E b 2020/9/1 1
Есть ли какой-либо способ добиться этого?
Поскольку я никогда не ссылался на date
, если у кого-то есть мнение, пожалуйста, дайте мне знать.
Ответ №1:
Вы можете использовать оконные функции:
select
t.*,
row_number() over(partition by customer order by surrender_date desc) rnk
from mytable
Примечания:
-
Я не понимаю, какое отношение этот вопрос имеет к агрегации
-
в зависимости от того, как вы хотите обрабатывать связи, вы можете искать
rank()
илиdense_rank()
вместоrow_number()