Как считать по дате ссылки в sql

#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()