我需要一周内周末前一天和后一天缺勤的员工的名单......比如如果有些人在周五缺勤而周一在场,则不应包含在列表中
问问题
71 次
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 回答