Автор: | А. Баранов | Ограничение времени: | 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