У нас есть база данных, которая содержит информацию о времени, забронированном для проектов. У нас есть оперативная запись для проекта, которая содержит правильную информацию о времени (импортируется из SAP один раз в неделю).
У нас также есть архивные записи, показывающие информацию о времени в определенный момент времени, они снимаются раз в неделю, по сути, это снимки.
Впоследствии пользователи могут подать запрос на корректировку времени проекта. Если это произойдет, прямая запись будет отражать правильное время для проекта, однако снимки не будут.
Мне нужно написать запрос, который проходит и обновляет эти снимки с точным временем для проекта, на тот момент.
У нас есть таблица данных SAP, в которой есть записи для каждой записи времени для проекта, показывающие код проекта, для которого он был, дату, для которой он был, и количество времени. Таблица исторических данных содержит код проекта и дату, когда был сделан моментальный снимок.
Поэтому мне нужно написать SQL-запрос, который будет проходить через таблицу исторических данных, и для каждой строки обновлять время, проведенное путем просмотра таблицы SAP и получения всех записей времени для этого кода проекта до даты, когда был сделан моментальный снимок.
Мне очень трудно сделать это в одном запросе SQL, основная проблема в том, что мне действительно нужно выполнить запрос для каждой записи в таблице исторических данных. Я продолжаю придумывать страницы, предлагающие использовать курсоры, но я не знаю много о них и продолжаю видеть статьи о том, что они плохие. Любые предложения по поводу того, какой запрос я могу использовать, чтобы быть в курсе, было бы здорово!
По сути, я хочу сделать в псевдокоде:
For Each Project Code in the hostorical data table, archived on a date, select all time entrys on or before that date.
Образцы таблиц
Historical Project Data SAP Data
----------------------- ----------------
Project Code | run date Project Code | Time | Date
1234 | 01/09/2009 1234 | 2 | 29/08/2009
9876 | 01/09/2009 1234 | 5 | 29/08/2009
1234 | 07/09/2009 9876 | 10 | 02/09/2009
9876 | 07/09/2009 1234 | 2 | 03/09/2009
Итак, я бы хотел закончить запросом, который показывает
Project Code | run date | time
1234 | 01/09/2009 | 7
9876 | 01/09/2009 | 0
1234 | 07/09/2009 | 9
9876 | 07/09/2009 | 10
Так, например, первая запись в запросе показывает все часы, забронированные для проекта 1234, в период до 01.09.2009