sql - 如何查找连续缺勤超过10天的员工?

标签 sql sql-server tsql sql-server-2005

我有一个表名称 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/

相关文章:

php - Mysql 在列上选择唯一行

c# - SQL 服务器未显示在 Microsoft Visual Studio 2010 上

sql-server - 有没有办法在 SQL Server 2005/2008 中禁用自动类型强制,从 varchar 到 int(例如)?

带有数字和 % 字符的 SQL 正则表达式

sql - Azure 开发运营 : Continuous deployment for sql script

sql-server - 我如何判断列是否可以从 nVarChar 变成 varChar?

sql-server - 如何改进大表的读取操作?

sql - 在多个表中查找相似的名称

sql - 在创建 IDENTITY 的同一个 T-SQL 语句中获取 IDENTITY 值?

php - 将表与子查询结果连接起来