+ -
当前位置:首页 → 问答吧 → 一个关于职称的数据库设计及处理问题求解

一个关于职称的数据库设计及处理问题求解

时间:2011-04-19

来源:互联网

在一个人事管理库里,打算建立一个技术职务(也就是常说的“职称”)的表,记录所有员工的职称经历。
比如结构及一个职工的内容如下:

职工号,职称(记录的是代码),任职时间(日期)
001,124(表示助理经济师),1995-8-1
001,123(经济师),1999-8-1
001,124,2004-8-1
001,123,2010-8-1

大致意思就是:职工001,1995年评初级,1999年评中级,2004年因为调动工作低靠认成初级,2010年平反恢复中级。

在统计中往往需要得到一些数据。
如果是需要现在的状态,则要得到,现在的职称是123,真实任职时间是1999-8-1,扣去低靠的6年可以推算出一个虚拟的连续任职时间是2005-8-1;如果是需要得到2009年时的状态,则要得到,当时的职称是124,真实任职时间是1995-8-1,扣去中间作为124的5年可以推算出一个虚拟的连续任职时间是2000-8-1。
这些用手工计算很容易理解,不加字段、仅以我给出的这些条件数据也足以得出这些想要的结果数据,但我不知道怎样用SQL得出想要的结果。
这不是作业,是个真实的应用,从表的设计到查询语句等等方面都欢迎给出建议。为了简便,不一定要写出完整无误的SQL语句,只要能表达出实用的思路即可。谢谢。

作者: encher   发布时间: 2011-04-19

做个记号。再来学习。

作者: guojianlin1985   发布时间: 2011-04-19

select top 1 * from table where 任职时间<= 时间变量 order by 任职时间 desc    这样可以得到职务状态。
但你讲的那个“连续任职时间”实在是没看明白怎么回事。

作者: marco   发布时间: 2011-04-19

引用:
原帖由 marco 于 2011-4-19 23:57 发表
select top 1 * from table where 任职时间
我只举的是一个员工的例子,实际用时会放多个员工的职称经历,我觉得应该会用到group by来分别得到每个人数据。不过这个容易解决,主要是搞不懂怎样在记录的简单化和查询的复杂化之间找到个平衡。
本来人事机构的管理上有个“连续工龄”这么个概念,是为了描述工龄出现空档的人。比如有人1950年参加工作,他的参加工作时间本该算1950,但他1966到1976年没有工作记录,无法证明他在某单位工作,那么他的工龄就要被扣去10年。为了便于计算,人事部门就把他参加工作的时间虚推至1960,这个1960就被称作连续工龄。和“工龄”不同,“连续工龄”是指虚推出的参加工作时间,不是年数。当普通报表时填真正的参加工作时间1950,当计算待遇相关内容时通常就要用连续工龄1960。
所谓“连续职龄”,是我从连续工龄上借鉴过来的概念。因为事业单位的职称是名额制,不像企业那样够格的都上,所以经常会发生调动低靠,导致一个人的职称产生波动或是说出现断层,企业应该少见。比如说有人2000年评了中级,2003年因故调来本单位套成初级,直到2005年才占了职称指标恢复成中级,那么本来是2000年评的中级,却出现了2年的空档。按照“连续工龄”的思路,他也会有个“连续职龄”2002。
人事上的概念很复杂,我也不专业,说起来很啰嗦。这么晚还在为我解答,辛苦了。

作者: encher   发布时间: 2011-04-20