Двухвременные запросы к таблицам 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

Другие вопросы по тегам