• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

sql统计遇到的难题,该如何解决

mysql 搞代码 7年前 (2018-05-31) 147次浏览 已收录 0个评论

sql统计遇到的难题
人事管理系统.举例就拿一张学历表来说吧.表里记录了职工的学历变迁情况    
 
表名:pstudy    
 
工号     学历    取得学历时间    
 
1      专科     1997    
 
1      本科                     2000    
 
2      本科                       2001    
 
3      本科                       1998    
 
3      硕士                       2002    
 

 
我想统计目前职工中最高学历是本科的职工,怎么样把时间因素也考虑进去呢,取出同个工号的最近的那条数据?具体sql语句请高手赐教,我用mysql.    
结果是2

——解决方案——————–
为什么是2,而不是1,2
——解决方案——————–
没明白~~
——解决方案——————–
是这个意思
select id,edu,min(year(now())-edutime) as t from pstudy where edu = '本科 'group by edutime order by t limit 1

得到
id edu t
—– —— —-
2 本科 6
——解决方案——————–
mysql> SELECT * FROM pstudy WHERE `学历`= '本科 ' ORDER BY `取得学历时间` DESC LIMIT 1;
+——+——+————–+
| 工号 | 学历 | 取得学历时间 |
+——+——+————–+
| 2 | 本科 | 2001 |
+——+——+————–+
1 row in set (0.02 sec)
——解决方案——————–
不懂 UP
——解决方案——————–
学历是本科的,最近的记录是2001 的这个,但是count(*) 怎么会是2??
时间是什么考虑的?
——解决方案——————–
那应该是我想那样吧,最后应该是工号是1和2的,count(*)就等于2了?哈哈
——解决方案——————–
CREATE TABLE #T (工号 NVARCHAR(10), 学历 NVARCHAR(10), 取得学历时间 INT)
INSERT INTO #T
SELECT '1 ', '专科 ', 1997
UNION SELECT '1 ', '本科 ', 2000
UNION SELECT '2 ', '本科 ', 2001
UNION SELECT '3 ', '本科 ', 1998
UNION SELECT '3 ', '硕士 ', 2002
SELECT * FROM #T

SELECT a.工号, a.学历,a.取得学历时间
FROM #T a
INNER JOIN (SELECT MAX(取得学历时间) AS 取得学历时间, 工号 FROM #T GROUP BY 工号) b ON a.工号 = b.工号 AND a.取得学历时间 = b.取得学历时间
WHERE a.学历 = '本科 '

DROP TABLE #T


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:sql统计遇到的难题,该如何解决
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址