Оператор Select создает переменную последовательности

#sql #sql-server

#sql #sql-сервер

Вопрос:

Как мне создать столбец, который ранжирует каждый ID по First и Last Date ?

 ID  First_Date  Last_Date   Age_Days
A   8/28/2020   12/22/2020  116
A   1/9/2019    8/12/2019   215
A   8/15/2019   8/28/2020   379
B   5/23/2017   1/9/2019    596
B   9/21/2019   3/16/2020   177
C   3/18/2020   9/29/2020   195
 

Желаемый результат:

 ID  Initial_Date    Last_Date   Age_Days    New_Column
A   1/9/2019    8/12/2019       215        1
A   8/15/2019   8/28/2020       379        2
A   8/28/2020   12/22/2020      116        3
B   5/23/2017   1/9/2019        596        1
B   9/21/2019   3/16/2020       177        2
C   3/18/2020   9/29/2020       195        1
 

Мой пример запроса SQL Server:

 SELECT 
ID, First_Date, Last_Date, Age_Days
FROM Table
ORDER BY ID, First_Date, Last_Date
 

Комментарии:

1. DENSE_RANK

Ответ №1:

Я думаю, вы просто хотите row_number() :

 select t.*,
       row_number() over (partition by id order by first_date) as new_column
from t
order by id, first_date;
 

Ваш образец данных не имеет связей с first_date so, похоже, нет причин для рассмотрения last_date .

Комментарии:

1. Должно быть order by first_date, last_date : по первой и последней дате

Ответ №2:

Попробуйте это:

 select x.ID,  x.First_Date,  x.Last_Date,   x.Age_Days,
   row_number() over (partition by x.id order by first_date) as New_Column
from x
 

Вы можете рассмотреть функцию типа ранга, если first_date дублирует