Включить нули в SQL-запрос, сгруппированные по датам - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть таблица, в которой перечислены проблемы (или задачи) для людей, и я хотел бы посчитать, сколько из них помечено как «Закрыто по времени».

Честно говоря, я не очень разбираюсь в 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)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

использовать левую таблицу в выборе, Вы использовали правый столбец таблицы (b.closed_on) при выборе, который необходимо изменить (a.closed_on)

SELECT
    cast(date_trunc('month', a.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', a.closed_on) as date)
ORDER BY cast(date_trunc('month', a.closed_on) as date) 
0 голосов
/ 19 ноября 2018

Попробуйте использовать условное агрегирование:

SELECT
    cast(date_trunc('month', b.closed_on) as date) AS time,
    sum(case when a.closed_on_time = 'On Time' 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)
WHERE
    a.assignee_groups in('Modelling','Global') and
    a.tracker in('Administration','Costing','N.A.','Prototype Shop','Simulation')
group by
    cast(date_trunc('month', b.closed_on) as date)
ORDER BY
    cast(date_trunc('month', b.closed_on) as date) 

Предполагается, что вы не хотите включать любые записи, которые не входят в указанные группы получателей или трекеров.Если вы делаете хотите включить эти записи, мой ответ необходимо будет обновить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...