Я использую DB2, хотя решение, использующее любую разновидность SQL, скорее всего, мне будет достаточно легко конвертировать.
Я не проектировал эту базу данных или приложение, которое использует базу данных. У меня нет полномочий изменить это приложение, его работу или данные. Поскольку это противоречит тому, что я считаю обычным использованием начальной и конечной даты, я пытаюсь написать что-то столь же простое, как выбор для определенного момента времени.
Вот соответствующие / отредактированные части таблицы:
OBJECTID FACILITY_ID START_DATE END_DATE FACILITY_NAME
1001 500 1/1/1980 5/1/2000 Really Old Name
1002 500 1/1/1980 1/1/2006 Old Name
1003 500 1/1/1980 null Current Name
1004 501 1/1/1980 3/1/2008 Closed Facility Name
1004 502 1/1/1980 null Another Current Name
То, что я хочу вернуть, это записи, которые действительны на 01.07.2005:
OBJECTID FACILITY_ID START_DATE END_DATE FACILITY_NAME
1002 500 1/1/1980 1/1/2006 Old Name
1004 501 1/1/1980 3/1/2008 Closed Facility Name
1004 502 1/1/1980 null Another Current Name
Я пытаюсь избежать подвыборов, но понимаю, что они могут быть необходимы. Если мне нужен отбор, я бы хотел, чтобы он был ограничен одним. Просмотр между начальной и конечной датой не работает, потому что он не возвращает объекты, которые имеют только одну запись с нулевой конечной датой. Добавление условия ИЛИ для включения конечных дат, которые являются нулевыми, может возвращать более одной записи в некоторых случаях. Эта проблема кажется настолько простой в сервисе, что я, должно быть, упускаю смехотворно очевидное решение. У кого-нибудь есть идеи?