Я ищу несколько советов о том, какой тип обновления был бы лучшим в определенном сценарии для t-sql DML.T-SQL Обновление текущей строки до значения следующей строки
пришел в вопросе данных, где конечные даты один день до даты начала на текущей записи, и необходимо установить дату окончания на дату начала следующего в строке для нескольких объектов
Например
rowid entity id record_type start_date end_date
214 250 1 H 2015-01-01 2014-12-31
329 250 1 H 2015-04-25 2015-04-24
533 250 1 C 2015-11-01 NULL
11 250 2 H 2015-06-01 2014-05-29
292 250 2 H 2015-09-11 2015-09-10
987 250 2 C 2015-10-01 NULL
Что мне нужно сделать, это обновить первую запись END_DATE к следующей записи StartDate - 1 на каждый сотрудник/организации.
В настоящее время существует более 5 тыс. Сущностей, подверженных этому, поэтому я пытаюсь как можно быстрее обновить эту запись на каждой записи, чтобы сэкономить время на этом.
Что я могу сделать, но отнимающее много времени, чтобы 1. получить максимальную сверку записей истории для всех компаний в один ряд 2. создать такое же количество временных таблиц для подсчета общих числа строк 3. Вставить минимальные значения даты начала в первую таблицу темпа 4. вставить минимальное значение не в таблицу темп 1 в таблицу 2 и т. Д. 5. затем обновить дату окончания временной таблицы 1 до начальной затеи 2 дня -1 день 6. оттуда, запустите обновление в фактической таблице с несколькими операциями обновления для каждой таблицы temp, объединенной в rowid.
Окончательный результат будет выглядеть следующим образом:
rowid entity id record_type start_date end_date
214 250 1 H 2015-01-01 2014-04-24
329 250 1 H 2015-04-25 2015-10-31
533 250 1 C 2015-11-01 NULL
11 250 2 H 2015-06-01 2014-09-10
292 250 2 H 2015-09-11 2015-9-31
987 250 2 C 2015-10-01 NULL
Любые предложения, кроме моего длинного списка временных таблиц/обновления будет весьма признателен! Я думал что-то вроде линии курсора, но я не уверен, будет ли это более быстрый способ написать обновление для этого сценария.
Используйте [автообъединение] (http://www.tutorialspoint.com/sql/sql-self-joins.htm) с 'LAG()' функция. –
Совет. Полезно пометить вопросы базы данных как с помощью соответствующего программного обеспечения (MySQL, Oracle, DB2, ...) и версии, например. 'SQL-сервер-2014'. Различия в синтаксисе и особенностях часто влияют на ответы. – HABO