我有一个表名称 Att。其中有 2 列:EmpID 和日期。 日期列包含员工出勤的所有日期。 我需要编写一个查询来查找是否有员工连续缺勤超过 10 天。
EmpID | Date
101 | 1/1/2012
101 | 2/1/2012
101 | 7/1/2012
101 | 18/1/2012
101 | 21/1/2012
101 | 25/1/2012
101 | 30/1/2012
102 | 1/1/2012
102 | 2/1/2012
102 | 5/1/2012
102 | 9/1/2012
102 | 14/1/2012
102 | 19/1/2012
102 | 24/1/2012
102 | 25/1/2012
102 | 28/1/2012
102 | 29/1/2012
102 | 30/1/2012
这里的结果应该是 101。 如何做到这一点?请帮忙。
最佳答案
如果您使用的是SQL Server 2012
,则可以使用LEAD
分析函数
WITH recordList
AS
(
SELECT EmpID, Date FromDate,
LEAD(Date) OVER (PARTITION BY EmpID ORDER BY Date ASC) ToDate
FROM tableName
)
SELECT DISTINCT EmpID
FROM recordList
WHERE DATEDIFF(d, FromDate ,ToDate) >= 10
其他链接
更新1
WITH firstList
AS
(
SELECT EmpID, Date,
ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY Date ASC) RN
FROM tableName
)
SELECT DISTINCT a.EmpID
FROM firstList a
INNER JOIN firstList b
ON a.RN + 1 = b.RN
WHERE DATEDIFF (d, a.Date , b.Date ) >= 10
关于sql - 如何查找连续缺勤超过10天的员工?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14796059/