как получить данные подсчета из 2 полей даты в одном месяце в SQL - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь создать запрос, в котором у меня есть 3 столбца.

  1. C_Time: содержит дату создания задачи, время
  2. Done_Time: содержит дату завершения задачи, время
  3. ID пользователя: уникальный идентификатор пользователя

Я хочу получить результат, в котором я хочу получить общее количество созданных задач в конкретном месяце и общее количество выполненных задач в том же месяце, сгруппированных по идентификатору пользователя

Вывод будет примерно таким:

UserID    |  CreatedCount   |  DoneCount
------------------------------------------
U12        |    12          |   12
-------------------------------------------
U13       |     7           |    5

здесь пользователь U12 создал 12 задач и выполнил 12 задач в январе 2020 года. Но пользователь U13 создал 7 задач в январе 2020 года и выполнил 5 задач за тот же месяц.

1 Ответ

1 голос
/ 17 июня 2020

Вы можете использовать apply, чтобы развернуть данные, а затем выполнить агрегирование:

select t.user_id, sum(is_create), sum(is_complete)
from t cross apply
     (values (t.c_time, 1, 0), (t.done_time, 0, 1)
     ) v(t, is_create, is_complete)
where v.t >= '2020-01-01' and v.t < '2020-02-01'
group by t.user_id;

Вы также можете сделать это с помощью условного агрегирования:

select user_id,
       sum(case when c_time >= '2020-01-01' and c_time < '2020-02-01' then 1 else 0 end),
       sum(case when done_time >= '2020-01-01' and done_time < '2020-02-01' then 1 else 0 end)
from t
group by user_id;

Это, вероятно, немного быстрее для вашего конкретного примера. Однако первая версия более универсальна - например, она позволяет легко подводить итоги как по пользователям, так и по месяцам.

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