我有一张组织表格。这些列是:id int,名称文本,parent_id int.so,它具有树结构。我有另一个表,人员,其字段ID为int,名称txt,家庭txt,organization_id int。我还有另一个表,时钟,并且这些列是:id int,staff_id int,Date date,Time time,用于注册时钟输入和时钟输出。
对于树中的每个组织(每个节点),我想计算其人员的工作时间。最后,我应该总结孩子的工作时间,以获得其父母的工作时间,依此类推。
所以我需要一个函数来做到这一点。某人可以帮忙吗?
答案 0 :(得分:1)
您不需要功能,请使用递归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