当前位置: 代码迷 >> Sql Server >> sql2008 依据生效日期和状态选出相关的人员,请指导.
  详细解决方案

sql2008 依据生效日期和状态选出相关的人员,请指导.

热度:477   发布时间:2016-04-24 09:41:55.0
sql2008 根据生效日期和状态选出相关的人员,请指导...
table a:   id,effdate,status
status: 0--new  1-rehire  2-terminated

如某人a存在如下记录:
a,2014-01-10, 0
a,2014-04-10,2
a,2014-08-10,1
...

现在想要统计如下结果:
根据选定日期,包或不包括当月离职的 active 人数(status不等于2都属于active; );
不包括当月离职:
1. 选定日期2014-03-15, a应该包括
2. 选定日期2014-04-15, a应该不包括
3. 选定日期2014-05-15 , a应该不包括
...选定日期6月,7月, a应该不包括
4. 选定日期2014-08-15 , a应该包括
5. 选定日期2014-09-15, a应该包括
...
包括当月离职:
1. 选定日期2014-03-15, a应该包括
2. 选定日期2014-04-15, a应该包括
3. 选定日期2014-05-15 , a应该不包括
...选定日期6月,7月, a应该不包括
4. 选定日期2014-08-15 , a应该包括
5. 选定日期2014-09-15, a应该包括
。。。

谢谢


------解决思路----------------------
引用:
有没有简单点
分组排序,貌似只能这样了
--不包括当月离职:
SELECT * FROM(
SELECT ROW_NUMBER()OVER(PARTITION BY id ORDER BY effdate DESC)RN,* FROM a
WHERE effdate<='2014-03-15'
)T
WHERE RN=1 AND STATUS<>2
--包括当月离职:
SELECT * FROM(
SELECT ROW_NUMBER()OVER(PARTITION BY id ORDER BY effdate DESC)RN,* FROM a
WHERE effdate<='2014-03-15'
)T
WHERE RN=1 AND STATUS=2