SQL Сервер: считать с условием - PullRequest
0 голосов
/ 03 мая 2020

У меня есть таблица, назовем их SUMMARYDATA

NIP  NAME   DEPARTMENT       STATUSIN           STATUSOUT               LATECOME
------------------------------------------------------------------------------------------------
A1   ARIA   BB         2020-01-21 08:06:23  2020-01-21 11:58:36         00:06:23             
A1   ARIA   BB         2020-01-22 07:34:27  2020-01-22 17:19:47         00:00:00               
A1   ARIA   BB         2020-01-23 08:30:00  2020-01-23 11:00:00         00:30:00
A1   ARIA   BB         2020-01-24 08:05:00  2020-01-24 10:30:00         00:05:00
A2   BELLE  BB         2020-01-21 07:06:20  2020-01-21 13:58:31         00:00:00             
A2   BELLE  BB         2020-01-22 07:34:27  2020-01-22 17:19:47         00:00:00               
A2   BELLE  BB         2020-01-23 07:06:00  2020-01-23 10:30:00         00:00:00
A2   BELLE  BB         2020-01-24 09:06:00  2020-01-23 10:30:00         02:06:00

Мне нужно SELECT(NIP,NAME,DEPARTMENT,LATECOME) и COUNT записей Count (where LATECOME > '00:00:01') > 2 в месяц

и вывод будет выглядеть так:

    NIP  NAME   DEPARTMENT       STATUSIN           STATUSOUT               LATECOME
    ------------------------------------------------------------------------------------------------
    A1   ARIA   BB         2020-01-21 08:06:23  2020-01-21 11:58:36         00:06:23 
    A1   ARIA   BB         2020-01-23 08:30:00  2020-01-23 11:00:00         00:30:00
    A1   ARIA   BB         2020-01-24 08:05:00  2020-01-24 10:30:00         00:05:00          

Потому что у Aria LATECOME> 2 в месяц, а у Belle только 1 LATECOME в месяц

Ответы [ 2 ]

1 голос
/ 03 мая 2020
select * from SummaryData
where name in
(select name from SummaryData where latecome > '00:00:01' group by name, year(statusin), month(statusin) having count(*)>2)
1 голос
/ 03 мая 2020

Если я правильно понимаю, вы можете использовать оконные функции:

select t.*
from (select t.*,
             count(*) over (partition by nip, name, department) as cnt_late
      from t
      where latecome <> '00:00:00'
     ) t
where cnt_late > 2;

Если в данных несколько месяцев, то:

select t.*
from (select t.*,
             count(*) over (partition by nip, name, department, year(statusin), month(statusin)) as cnt_late
      from t
      where latecome <> '00:00:00'
     ) t
where cnt_late > 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...