#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 дублирует