2015-04-23 61 views
0

我想知道是否选择了一个静态的日期范围(例如5月1日至6月30日),然后告诉我是否有人在一周内(第1周,第2周,第3周,第4周)有超过5个日历条目。如果更容易,可以通过选择一个星期数来代替日期范围,然后显示在第1周工作超过5次的任何人,例如日期的静态范围。MS SQL - 查找某人是否在一周内工作超过5次 - 寻找超时

这将告诉我,如果有人有加班计划。

EmpCalendar表(以粗体显示相关列)(子弹是示例行)

CAL_ID,USER_ID,days_date,WeekNumber

  • 1,34,2015-04-01, Week1
  • 3,34,2015年4月2日,Week1
  • 5,34,2015年4月3日,Week1
  • 7,34, 2015-04-09,Week1
  • 8,34,2015年4月5日,Week1
  • 9,34,2015年4月6日,Week1

所以在上面的表中,我们看到具有user_id'34'的员工在'Week1'的WeekNumber上工作了6次。我需要它返回类似于:

Tom Thumb(user_id = 34)在第1周或在同一周内的日期内工作了6次。对此有所影响。我使用的ColdFusion 8和MS SQL 2008

回答

0

Week1可以在不同的年数或月内被复制,这样做是yearmonthweek组合在一起,以便正确的方法:通过

Select UserID, Year(Date), Month(Date), DATEPART(wk, Date), Count(*) As Days 
From Table 
Where Date Between @StartDate And @EndDate 
Group by UserID, Year(Date), Month(Date), DATEPART(wk, Date) 
Having Count(*) > 5 
+1

错字,没有havig – dman2306

+0

感谢这一个。 'aphrael'与我的需求最匹配,再次感谢! –

+0

* RE:'aphrael'最符合我的需求*谁或什么是'aphrael'? :) – Leigh

0

单群(假设周数不重复 - 取决于它们在表格中的分配方式):

Select UserID, WeekNumber 
, count(distinct Days_Date) as DaysWorked 
From EmpCalendar 
--optional, if you want to limit the dates you're searching 
where days_date between @startDate and @endDate  
--not optional 
group by UserID, WeekNumber 
having count(distinct Days_Date) >= 5