Двухвременные запросы к таблицам SQL
Я пытаюсь смоделировать таблицу SQL для хранения изменений заработной платы сотрудников. Один из подходов заключается в использовании двухвременной таблицы следующим образом:
Здесь 1.10.2015 наняли сотрудника с зарплатой 100000 рублей. Затем, 15 февраля 2016 г., у него была проверка эффективности, и его начальник сказал: "Мы повышаем вашу зарплату до 110 000 с начала текущего года (01.01.2016).
Для хранения этой информации я использую два набора диапазонов дат. "Эффективный" сообщает вам, когда зарплата была действительной, например, 100 тысяч долларов до 01.01.2016 и 110 тысяч с этого момента. С другой стороны, "установленный" диапазон указывает, когда было принято решение, в данном случае 15.02.2016. Таким образом, я смогу запросить следующие сценарии:
- какая у него была зарплата в декабре 2015 года после пересмотра зарплаты = старая зарплата
- какая у него была зарплата 2 января 2016 года до пересмотра = старая зарплата (потому что сотрудник еще не знал о повышении)
- какова была его зарплата 2 января 2016 г. после проверки = новая зарплата (потому что теперь сотрудник знает о повышении)
- так далее
Кажется, у меня есть две переменные: EffectiveOn и SetOn. Однако я изо всех сил пытаюсь придумать SQL-запрос, который дал бы правильные результаты.
Вот что я пробовал до сих пор (работает не для всех сценариев):
SELECT *
FROM Employees
WHERE (EmployeeId = 10)
AND
(
((SettledFrom <= @settledOn) AND (SettledTo IS NULL OR (SettledTo > @settledOn)))
AND ((EffectiveFrom <= @effectiveOn) AND (EffectiveTo IS NULL OR (EffectiveTo > @effectiveOn)))
)
В идеале мне нужен SQL-запрос, который работает во всех сценариях и каждый раз выдает ровно одну строку результатов. Любая помощь приветствуется. То же самое и с любыми улучшениями в дизайне стола.
1 ответ
После дальнейшего расследования я определил, что мой SQL-запрос действительно верен. Однако, чтобы сценарий был полностью двухвременным, мне не хватало нескольких строк в БД. Вот как должна выглядеть БД:
https:https://stackru.com/images/a55363304ea68ad619ada85f9bbe64023e57ad87.png