#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;
Это возвращает разницу между начальной датой в текущей строке и самой ранней начальной датой, связанной с этой конечной датой.