diff --git a/server/src/v1/project.ts b/server/src/v1/project.ts
index 6a33e994ab4c32b3ad037e0c756f8cc865ed158c..b285bcbf2b56620b90fefa930b6209750e95e7f0 100644
--- a/server/src/v1/project.ts
+++ b/server/src/v1/project.ts
@@ -282,13 +282,16 @@ project.get('/:uuid/completion', async (req, res) => {
                     database('team_members')
                         .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id')
                         .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id')
-                        .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id')
-                        .leftJoin('workhours', 'tasks.id', 'workhours.task_id')
                         .select({
                             id: 'tasks.id',
                             status: database.raw(
                                 'Case When `tasks`.`status` = \'open\' '
-                                + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) '
+                                + 'And (Select '
+                                        + 'Sum(`task_requirements`.`time` * 60 * 1000) '
+                                        + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) '
+                                    + '< (Select '
+                                        + 'Sum(`workhours`.`finished` - `workhours`.`started`) '
+                                        + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) '
                                 + 'Then \'overdue\' Else `tasks`.`status` End'),
                         })
                         .where({
diff --git a/server/src/v1/team.ts b/server/src/v1/team.ts
index a106fe79c0782e57b9c2f1043cb9b542cffe7899..3257771e7cc48b2f3dda2fbe9318601d6b4ae3a9 100644
--- a/server/src/v1/team.ts
+++ b/server/src/v1/team.ts
@@ -400,13 +400,16 @@ team.get('/:uuid/completion', async (req, res) => {
                     database('team_members')
                         .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id')
                         .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id')
-                        .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id')
-                        .leftJoin('workhours', 'tasks.id', 'workhours.task_id')
                         .select({
                             id: 'tasks.id',
                             status: database.raw(
                                 'Case When `tasks`.`status` = \'open\' '
-                                + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) '
+                                + 'And (Select '
+                                        + 'Sum(`task_requirements`.`time` * 60 * 1000) '
+                                        + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) '
+                                    + '< (Select '
+                                        + 'Sum(`workhours`.`finished` - `workhours`.`started`) '
+                                        + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) '
                                 + 'Then \'overdue\' Else `tasks`.`status` End'),
                         })
                         .where({
diff --git a/server/src/v1/user.ts b/server/src/v1/user.ts
index 43e9244309be3818dd2a904919358875b56d20d1..049646452834c86fef3317ea0a916ecfcda20004 100644
--- a/server/src/v1/user.ts
+++ b/server/src/v1/user.ts
@@ -221,14 +221,17 @@ user.get('/completion', async (req, res) => {
         const to = new Date(parseInt(req.query.to as string ?? Date.now()));
         const completion = await database(
                 database('task_assignees')
-                    .leftJoin('tasks', 'task_assignees.task_id', 'tasks.id')
-                    .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id')
-                    .leftJoin('workhours', 'tasks.id', 'workhours.task_id')
+                    .innerJoin('tasks', 'task_assignees.task_id', 'tasks.id')
                     .select({
                         id: 'tasks.id',
                         status: database.raw(
                             'Case When `tasks`.`status` = \'open\' '
-                            + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) '
+                            + 'And (Select '
+                                    + 'Sum(`task_requirements`.`time` * 60 * 1000) '
+                                    + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) '
+                                + '< (Select '
+                                    + 'Sum(`workhours`.`finished` - `workhours`.`started`) '
+                                    + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) '
                             + 'Then \'overdue\' Else `tasks`.`status` End'),
                     })
                     .where({