У меня есть база данных, которая пытается получить информацию на определенный момент времени, имея основную таблицу и таблицу истории, которая записывает, когда поля в другой таблице изменятся. например,
Таблица: сотрудник
Id | Name | Department
-----------------------------
0 | Alice | 1
1 | Bob | 1
Таблица: История
ChangeDate | Field | RowId | NewValue
---------------------------------------------
05/05/2009 | Department | 0 | 2
В нем указывается, что сотрудник 0 (Алиса) переместится в отдел 2 05.05.2009.
Я хочу написать запрос, чтобы определить отдел сотрудника на определенную дату. Так что нужно:
- Найти первую запись истории для этого поля и сотрудника до указанной даты
- Если ничего не существует, по умолчанию используется текущее значение в основной таблице сотрудников.
Как я могу это сделать? Моя интуиция состоит в том, чтобы выбрать первую строку набора результатов, в которой все подходящие записи истории упорядочены в обратном порядке по дате и последним значением в основной таблице (так что это только первый результат, если нет подходящих записей истории), но я не для этого не требуется SQL-фу.
Примечание: я осознаю, что это может быть не самый лучший способ внедрения этой системы - я не могу изменить это в краткосрочной перспективе - хотя, если вы можете предложить лучший способ реализовать это, я бы рад это слышать.