【发布时间】:2011-09-02 04:30:59
【问题描述】:
我需要获取过去 4 周内每一周被解雇的最后 90 名员工。这是一个滚动报告。
员工表是这样的:
id hired_date term_date
3 07/1/2011 09/01/2011
4 07/18/2011 NULL (NULL means still active)
5 01/20/2009 08/23/2011
6 05/30/2011 8/22/2011
7 7/20/2011 7/23/2011
报告将采用这种格式。 ID #4,5 将被忽略,因为 #4 仍处于活动状态且 #5 在 90 天期限之前被雇用。
Week ending Terminated employees hired within past 90 days
09/03/2011 2 --(id 3,7)
8/27/2011 2 --(id 6,7)
..
..
- 所以 9/03 的第一行是雇用的终止员工人数 2011 年 9 月 3 日过去 90 天(可追溯到 2011 年 6 月 5 日)。这不包括 id #6,因为员工是在 6 月 5 日之前被雇用的。
- 8/27 周的第二行相同,但范围是 8/27 到 5/29。
我有一个日期表,但它只包含 week_start_date、week_end_date 和 week_number。我是否需要创建一个包含 90 天的时间段?
我不知道如何仅在过去 90 天内为员工执行此操作,然后计算过去 4 周的每一周。
SQL Server 2008
编辑: 我想我很接近了。我现在正在测试它。 All_termed_employees 是任何日期范围内被解雇的员工的列表。 week 表现在包含与其关联的每个星期的 Ninety_begin_date 和 Ninety_end_date。
select wk.ninety_end, count(h.id)
FROM @weeks wk
LEFT JOIN all_termed_employees h
ON h.hire_date <= wk.ninety_end and h.hire_date >= wk.ninety_begin
and .termination_date <= wk.ninety_end AND h.termination_date >= wk.ninety_begin
ORDER BY d.id
GROUP BY wk.ninety_end
【问题讨论】:
标签: sql sql-server sql-server-2008