У меня есть таблица, в которой перечислены проблемы (или задачи) для людей, и я хотел бы посчитать, сколько из них помечено как «Закрыто по времени».
Честно говоря, я не очень разбираюсь в SQL-запросах, и я пытаюсь просто собрать данные всех задач, закрытых по времени, за месяц.
Вот (postgres) SQL-запрос:
SELECT
cast(date_trunc('month', b.closed_on) as date) AS time,
count(distinct a.issue_id) as "Tasks Closed On Time"
from redmine_issues_summary a
left join redmine_issues_summary b on cast(date_trunc('month', b.closed_on) as date) = cast(date_trunc('month', a.closed_on) as date)
WHERE
a.assignee_groups in('Modelling','Global') and
a.tracker in('Administration','Costing','N.A.','Prototype Shop','Simulation') and
a.closed_on_time = 'On Time'
group by cast(date_trunc('month', b.closed_on) as date)
ORDER BY cast(date_trunc('month', b.closed_on) as date)
Тем не менее, я делаю что-то не так с соединением, потому что я не получаю строки, где количество равно нулю.
Может ли кто-нибудь помочь мне здесь?
EDIT:
@ Ответ Тима помог мне найти решение.
SELECT
cast(date_trunc('month', b.closed_on) as date) AS time,
SUM(case when a.closed_on_time = 'On Time' and a.assignee_groups in('LOH_Modelling&Analysis','LOH_Modelling&Analysis, Global_CAE','LOH_Modelling&Analysis, KOP_CAE, Global_CAE','Project_Admin, LOH_Modelling&Analysis','Project_Admin, LOH_Modelling&Analysis, Global_CAE') and
a.top_parent_project_name in('1_Global GKN Projects') and
a.tracker in('Administration') THEN 1 ELSE 0 END) as "Tasks Closed On Time"
from redmine_issues_summary a
left join redmine_issues_summary b on cast(date_trunc('month', b.closed_on) as date) = cast(date_trunc('month', a.closed_on) as date)
group by cast(date_trunc('month', b.closed_on) as date)
ORDER BY cast(date_trunc('month', b.closed_on) as date)