Количество запросов SQL с группировкой по и заполнением хотя бы одной даты

#sql #sql-server

#sql #sql-сервер

Вопрос:

Мне нужно написать sql-запрос, в котором я подсчитываю количество сотрудников, которые не указаны. У каждого сотрудника может быть несколько записей с комментариями участников. Если они представлены, то дата объекта будет иметь дату, в противном случае будет иметь нулевое значение. Я хочу игнорировать тех, кто был показан хотя бы один раз (будет иметь дату, связанную в столбце даты функции)

Например:

 Empid   comment     featuredate
101      cool       null
101      bad        2/2/2020
102      nice       null
102      not nice   null
 

таким образом, мой запрос должен возвращать только empid 102, поскольку они не отображаются по крайней мере один раз.

Что я пробовал?

Я попробовал group by вместе с having, но застрял там.

Ответ №1:

Вы можете использовать агрегирование:

 select empid
from t
group by empid
having max(featuredate) is null;
 

Примечание: Это предполагает, что все сотрудники находятся в вашей таблице. Если нет, используйте not exists :

 select e.*
from employees e
where not exists (select 1
                  from features f
                  where f.empid = e.empid and f.featuredate is not null
                 );
 

Если вам нужно только количество, вы можете использовать любой из них в качестве подзапроса. Или просто используйте select count(*) со вторым запросом.

Ответ №2:

Вы можете использовать group by следующее:

 Select empid
From your_table
Group by empid
Having max(featuredate) is null;