-1

我需要一周内周末前一天和后一天缺勤的员工的名单......比如如果有些人在周五缺勤而周一在场,则不应包含在列表中

在此处输入图像描述

4

2 回答 2

1

使用 datepart(weekday, ) 获取与星期一和星期五相关的所有记录。

也看看SET DATEFIRST函数。

select *
from   your_table
where  datepart(weekday, Date) = 5 
or     datepart(weekday, Date) = 1;
于 2018-02-25T14:36:20.143 回答
0

这将列出周五和下周一(+1 周)缺勤的所有员工 ID。我从表中设置了从最小日期到最大日期的日历周,并且只得到星期五和星期一。然后获取所有这些日期中没有出席的所有empid。

with caldte as (
SELECT  dateadd(day, rn - 1, t.mindte) as dates,
        datepart(weekday, dateadd(day, rn - 1, t.mindte)) as weekday,
        datepart(wk, dateadd(day, rn - 1, t.mindte)) as weeknum
FROM    ( 
  select row_number() OVER ( order by c.object_id ) AS rn
  FROM sys.columns c) rns, 
  (select min(dte) as mindte, max(dte) as maxdte 
   from tbl) t
    WHERE   rn - 1 <= datediff(day, t.mindte, t.maxdte)
    and datepart(weekday, dateadd(day, rn - 1, t.mindte)) in (2, 6)
  )
select distinct empid  
from tbl
where empid not in (
  select t.empid
  from caldte c, tbl t
  where c.dates = t.dte)
order by empid
于 2018-02-25T15:40:52.023 回答