Я предполагаю, что в настоящее время у вас есть строки со значениями, такими как
StartDate
---------
1 Jan 1990
2 June 1998
4 September 2006
И вы хотите изменить на
StartDate EndDate
--------- ------------
1 Jan 1990 2 June 1998
2 June 1998 4 September 2006
4 September 2006 NULL
Совершенно независимо от проблемы избыточности и обслуживания, которая напоминает мне о этом вопросе , где такая установка с коррелированными столбцами фактически вызывала проблемы с исходным плакатом при запросе данных. (Я предпочитаю Необоснованный ответ своему на этот вопрос!)
Зачем вам нужно добавить столбец EndDate
? Вероятно, будет возможно составить запрос, который работает без него.
Редактировать После долгих разговоров с row_number()
Я не смог найти запрос с лучшим планом, чем этот. (Предполагается индекс на StartDate
)
SELECT
id,
StartDate,
(SELECT MIN(StartDate)
FROM testTable t2
WHERE t2.StartDate > t1.StartDate) AS EndDate
FROM testTable t1