Задача D. Регистрация сотрудников

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  

Условие

База данных предприятия состоит из двух основных таблиц, содержащих информацию о сотрудниках и связанных с ними событиях.

EMPLOYEES (сотрудники):

ROWI INTEGER PRIMARY KEY, ... ;

EVENTS (события):

ROWI INTEGER PRIMARY KEY, WHOI INTEGER REFERENCES EMPLOYEES(ROWI), WHAT INTEGER, TIME DATE,
CONSTRAINT UNIQ UNIQUE (WHOI, TIME);

Здесь тип события (WHAT) может принимать одно из следующих значений:

0 — принят на работу,

1 — ушел в отпуск,

2 — вышел из отпуска,

3 — уволен.

Требуется выполнить проверку содержащихся в БД записей на предмет соответствия указанным ниже правилам:

- сотрудники, информация о которых содержится в таблице EMPLOYEES, хотя бы раз должны быть приняты на работу;

- сотрудник не может быть принят на работу, если в данный момент он уже числится на ней;

- сотрудник не может уйти в отпуск, если на данный момент он не числится на работе;

- сотрудник не может уйти в новый отпуск, пока не закончится предыдущий;

- сотрудник не может выйти из отпуска, если на данный момент у него нет открытых отпусков;

- в таблице не должно быть сотрудников с не закрытыми отпусками;

- продолжительность отпуска не должна превышать 30 дней;

- сотрудник не может быть уволен во время своего отпуска;

- сотрудник не может быть уволен в течение 14 календарных дней со дня выхода из отпуска;

- сотрудник не может быть уволен, если на данный момент он не числится на работе.

В качестве ответа нужно вывести таблицу из двух столбцов, в которой каждому сотруднику (EMPLOYEES.ROWI),
ставится в соответствие значение:

1 — если все записи о нем корректны;

0 — в противном случае.

Результат выборки должен быть отсортирован по первому столбцу.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.

Значения типа DATE задаются в виде строк, имеющих следующий формат: YYYY-MM-DD


0.091s 0.022s 17