Мне нужен запрос, чтобы получить количество уникальных / уникальных идентификаторов сотрудников, которые работали за месяц в каждом отделе.
Итак, мне нужен список отдельных отделов сотрудников, возвращенных в одном столбце, а затем счетиз того, сколько уникальных идентификаторов сотрудников было синхронизировано в этом месяце во втором столбце, сколько уникальных сотрудников было синхронизировано в прошлом месяце в третьем столбце, а затем сколько тактов за месяц до этого в четвертом столбце.
Конечный результатдолжно выглядеть примерно так:
| DeptID | ThisMonth | LastMonth | MonthBefore |
------------------------------------------------
1001, 2, 3, 2
1002, 4, 5, 2
1003, 5, 7, 3
Существуют десятки тысяч временных меток, поэтому для производительности мне нужно ограничить общее количество возвращаемых данных, а затем попытаться суммировать все в этом окне.Кроме того, эти результаты в конечном итоге необходимо будет передать в другую временную таблицу.
До сих пор я пробовал варианты следующего запроса:
SELECT
DISTINCT P.DepartmentID AS "DeptID",
--COUNT(DISTINCT CI.EmployeeID),
(SELECT COUNT(DISTINCT CI.EmployeeID) WHERE (ShiftStart >=
(DATE_TRUNC('month',NOW())) AND ShiftEnd <= (DATE_TRUNC('month',NOW()) + '1 month'::INTERVAL - '1 day'::INTERVAL))),
(SELECT COUNT(DISTINCT CI.EmployeeID) WHERE (ShiftStart >= (DATE_TRUNC('month',NOW()) - '1 month'::INTERVAL) AND ShiftEnd <= (DATE_TRUNC('month',NOW()) - '1 day'::INTERVAL))),
(SELECT COUNT(DISTINCT CI.EmployeeID) WHERE (ShiftStart >= (DATE_TRUNC('month',NOW()) - '2 month'::INTERVAL) AND ShiftEnd <= (DATE_TRUNC('month',NOW()) - '1 month'::INTERVAL - '1 day'::INTERVAL)))
FROM TimeClock CI
INNER JOIN dbo.Personnel P ON CI.EmployeeID = P.RecordID
WHERE ShiftStart >= (DATE_TRUNC('month',NOW()) - '2 month'::INTERVAL)
AND ShiftEnd <= (DATE_TRUNC('month',NOW()) + '1 month'::INTERVAL - '1 day'::INTERVAL)
GROUP BY P.DepartmentID, CI.ShiftStart, CI.ShiftEnd--, CI.EmployeeID
Проблема, с которой я столкнулся, заключается вдепартаменты дублируются - скорее всего, из-за начальной и конечной отметок смен, находящихся в ГРУППЕ.Я бы предпочел не разбивать это на несколько запросов, если это возможно.