2015-04-23 63 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