Вычислить столбец с номером дня по отношению к диапазону дат

#sql #sql-server #datetime

#sql #sql-сервер #дата-время

Вопрос:

Я пытаюсь получить номер дня для StartDate по отношению к EndDate в виде столбца во временной таблице. Таким образом, 12/16 будет первым днем, а 12/17 — вторым днем и т.д.

Текущий:

ID StartDate Дата окончания
01 2020/12/16 2020/12/18
02 2020/12/17 2020/12/18
03 2020/12/18 2020/12/18

Необходимый результат:

ID StartDate Дата окончания День в диапазоне
01 2020/12/16 2020/12/18 1
02 2020/12/17 2020/12/18 2
03 2020/12/18 2020/12/18 3

Возможно ли это сделать в SQL Server?

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

1. Какие исследования вы провели? Что вы пробовали? Где вы застряли?

2. До сих пор я пытался использовать datediff, но я не обязательно ищу продолжительность. Я также пытался разделить, используя номер строки, но есть случаи, когда могут быть две строки с одинаковой начальной датой.

Ответ №1:

Хммм … это то, чего ты хочешь?

 select t.*,
       datediff(day, min(startdate) over (partition by enddate), startdate)   1
from t;
 

Это возвращает разницу между начальной датой в текущей строке и самой ранней начальной датой, связанной с этой конечной датой.