我有一张桌子,就叫他们吧。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
以每月
如果我理解正确的话,你可以使用窗口函数。
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;
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)