SQL服务器:带条件的计数

问题描述 投票:0回答:1

我有一张桌子,就叫他们吧。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次,而贝儿只有1次。LATECOME 以每月

sql sql-server count
1个回答
1
投票

如果我理解正确的话,你可以使用窗口函数。

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;

1
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.