Расчет в postgresql с использованием функций - PullRequest
0 голосов
/ 11 января 2019

У меня есть таблица организаций. Это следующие столбцы: id int, name name, parent_id int.so имеет древовидную структуру. У меня есть другая таблица, штатная, с полями id int, name txt, family txt, organization_id int. У меня есть другая таблица, часы и столбцы: id int, staff_id int, Date date, Time time, в котором регистрируются входы и выходы часов.

Для каждой организации в дереве (для каждого узла) я хочу рассчитать рабочее время ее персонала. Наконец, я должен подвести итог рабочего времени детей, чтобы узнать рабочее время его родителей и так далее.

Так что мне нужна функция для этого. Может ли sb помочь?

1 Ответ

0 голосов
/ 12 января 2019

Вам не нужна функция, используйте рекурсивный CTE.
Если я правильно понял вашу схему и значение столбцов, это должно выглядеть так:

WITH RECURSIVE BrowseOrgs(init_id, id, name, parent_id) AS (
    SELECT id, id, name, parent_id
    FROM organizations
    /* Add WHERE clause here if needed */
    UNION ALL
    SELECT init_id, o.id, b.name, o.parent_id
    FROM organizations o
    JOIN BrowseOrgs b ON o.parent_id = b.id
)                       
SELECT init_id, b.name, date, SUM(time)
FROM BrowseOrgs b
JOIN staff s ON organization_id = b.id
JOIN clocks c on s.id = staff_id
GROUP BY init_id, b.name, date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...