У меня есть три таблицы, связанные с этим конкретным запросом:
- Lawson_Employees:
LawsonID
(pk), LastName
, FirstName
, AccCode
(числовой)
- Lawson_DeptInfo:
AccCode
(pk), AccCode2
(не спрашивайте, HR настроен), DisplayName
- tblExpirationDates:
EmpID
(шт.), ACLS
(дата), EP
(дата), CPR
(дата), CPR_Imported
(дата), PALS
(дата), Note
Цель состоит в том, чтобы получить данные, которые я должен сообщать обо всех тех, кто уже истек в одной или нескольких сертификациях или собирается истечь в течение следующих 90 дней.
Некоторые важные заметки:
- Это выполняется как часть vbScript, поэтому 90-дневная дата рассчитывается при запуске сценария. Я использую
2010-08-31
в качестве заполнителя, так как это результат на момент публикации этого вопроса.
- Срок действия всех карт истекает в конце месяца. (именно поэтому указанная дата относится к концу августа, а не к точкам 90 дней)
- Действительная карта EP заменяет сертификацию ACLS, но для некоторых сотрудников требуется только последняя. (не собирался волноваться об этом, пока я не получу ответ на этот вопрос, но если я смогу получить помощь, я возьму это)
- В столбце CPR указана дата окончания последнего класса, который они взяли с собой. (NULL, если они не брали у нас уроки)
- Столбец CPR_Imported содержит дату окончания срока действия последнего класса, который они взяли где-то еще. (NULL, если они не брали его в другом месте, и браво для следования политике)
- Различие между классами СЛР важно для других отчетов. Для целей настоящего отчета все, что нас действительно волнует, это то, какой из них является наиболее актуальным или, по крайней мере, текущим.
- Если потребуется, я пока что буду игнорировать ACLS и PALS, так как именно несоблюдение условий обучения CPR является большой проблемой в данный момент. (не то чтобы другие не были, но они не были упомянуты на последнем собрании ...)
Вот мой запрос, который дает мне хорошие данные:
SELECT
iEmp.LawsonID, iEmp.LastName, iEmp.FirstName,
dept.AccCode2, dept.DisplayName,
Exp.ACLS, Exp.EP, Exp.CPR, Exp.CPR_Imported, Exp.PALS, Exp.Note
FROM (Lawson_Employees AS iEmp
LEFT JOIN Lawson_DeptInfo AS dept ON dept.AccCode = iEmp.AccCode)
LEFT JOIN tblExpirationDates AS Exp ON iEmp.LawsonID = Exp.EmpID
WHERE iEmp.CurrentEmp = 1
AND ((Exp.ACLS <= #2010-08-31#
AND Exp.ACLS IS NOT NULL)
OR (Exp.CPR <= #2010-08-31#
AND Exp.CPR_Imported <= #2010-08-31#)
OR (Exp.PALS <= #2010-08-31#
AND Exp.PALS IS NOT NULL))
ORDER BY dept.AccCode2, iEmp.LastName, iEmp.FirstName;
После просмотра набора результатов, я думаю, что я пропускаю некоторые даты истечения срока, которые должны быть в наборе результатов. Я что-то пропустил? Это бесполезная часть того, чтобы быть единственным разработчиком в отделе ... никто не просит небольшой помощи.