查找数据表中不存在条目的日期

时间:2015-09-03 10:35:25

标签: vb.net datatable

我有一个数据表,其中包含每位员工的日期列表,一个员工的示例:

employee  date
emp1      Monday 3rd 10am
emp1      Monday 3rd 12am
emp1      Monday 3rd 3pm
emp1      Tuesday 4th 9am
emp1      Wednesday 5th 2pm
emp1      Friday 6th 10am
emp1      Saturday 7th 10am

在我的例子中,星期四不见了。 我想知道周一到周五的任何一天是否都没有记录。

每位员工每天可以有多条记录,周末也可以有记录。因此,计算记录并没有帮助。我可以看到一个非常缓慢的方法,这将循环5次,检查,直到我找到每个工作日;并为每位员工重复一遍。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

这个sql应该给你一个每周雇员的数据表,他们没有在数据库上记录5个工作日:

   select emp_id, week_no, count(*)
      from
      (select distinct emp_id,datepart(ww, work_Date) week_no, datepart
       (dw,work_Date) weekday 
      from dates_table
              where datepart(dw,pet_work_Date) in (2,3,4,5,6 )) as v
            group by emp_id, week_no
            having count(*) < 5;

这个sql将提供更具信息性的数据表,以确定缺少哪一天:

select emp_id, week_no, 
  sum(mon_present) mon_present,  
  sum(tue_present) tue_present,  
  sum(wed_present) wed_present,  
  sum(thu_present) thu_present,
  sum(fri_present) fri_present,
  count(*)
from
(select distinct emp_id,datepart(ww, work_Date) week_no, datepart(dw,work_Date) weekday ,
  case when datepart(dw,work_Date) = 2 then 1 else 0 end mon_present,
  case when datepart(dw,work_Date) = 3 then 1 else 0 end tue_present,
  case when datepart(dw,work_Date) = 4 then 1 else 0 end wed_present,
  case when datepart(dw,work_Date) = 5 then 1 else 0 end thu_present,
  case when datepart(dw,work_Date) = 6 then 1 else 0 end fri_present
  from dates_table_test
where datepart(dw,work_Date) in (2,3,4,5,6 )) as v
group by emp_id, week_no
having count(*) < 5
;

答案 1 :(得分:0)

解决方法可能是:

从数据库中获取所有数据。

然后,对于每个员工,使用字符串匹配(使用正则表达式)来选择所有日期并计算特定日期的条目数。如果七天计数中的任何一个为0,那么您可以得出结论,特定日期没有该特定员工的记录。