Логика для расчета номера дня года, который не является выходным? - PullRequest
0 голосов
/ 26 ноября 2011

Что мне требуется: - Для таблицы БД, в которой есть запись всех дней года с флагом «IsHoliday» с «Да», если это выходной, и «Нет», если это не так.

Я хочу дать индекс дня, который не является выходным, начиная с 1 до первого рабочего дня года и т. Д. С помощью пакета.

Текущая ситуация: - isСуществует таблица выходных, поддерживаемая ручными записями в моей БД (Oracle).Всякий раз, когда нам нужно проверить конкретную дату рабочего дня или выходного дня, мы нажимаем на БД для каждой введенной даты и сравниваем с таблицей выходных, которая является дорогим способом.

То, что мне требуется, кажется оптимизированным способом, поэтому я хочу сохранить таблицу БД, в которой в качестве записей указаны рабочие дни, а также день года, как в некоторых бизнес-сценариях, в качестве возврата я должен указать номер дня.(если 4 января (четверг) - 4-й рабочий день, то я хочу вернуть 4, 8 января как 6)

CAL_DT IS_HOLIDAY WKNG_DAY_INDX

1 января-11 Да

2 января 2001 г. № 1

3 января 11 г. № 2

4 января 11 Да

5 января-11 Нет 3

6-Jan-11 No 4

Индекс заполняется партией, проверяющей is_holiday = поле не является моим требованием.

Надеюсь, теперь все ясно ??

Буду признателен за предложения.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

У вас будут две большие проблемы:

1 - Не во всех культурах одинаковые праздники, поэтому ваши заявки на участие в Индии не будут такими же, как в США, не будут для большинства другихстран.

2 - много праздников перемещаются, поэтому кортеж (день года, isHoliday) не может, например, считать четвертый четверг ноября праздником, потому что это не тот же день года.Не говоря уже о високосных годах, испортятся выходные после февраля.

Что вам, вероятно, следует сделать, это иметь несколько столбцов в таблице выходных - набор столбцов для перемещения выходных и набор столбцов, где праздник всегдатот же день месяца.Столбцы для одного будут пустыми при заполнении столбцов для другого.Удачи с SQL для перевода их в день года.

0 голосов
/ 26 ноября 2011

Вы можете использовать аналитическую функцию ROW_NUMBER () для получения последовательного числа.

SELECT ROW_NUMBER() OVER (ORDER BY CalendarDate) AS RowNum_
     , CalendarDate
FROM MyDB.Calendar
Where IsHoliday = 'No';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...