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