人事管理系统.举例就拿一张学历表来说吧.表里记录了职工的学历变迁情况  
 
表名:pstudy  
 
工号     学历    取得学历时间  
 
1      专科     1997  
 
1      本科          2000  
 
2      本科           2001  
 
3      本科           1998  
 
3      硕士           2002  
  
我想统计目前职工中最高学历是本科的职工,怎么样把时间因素也考虑进去呢,取出同个工号的最近的那条数据?具体sql语句请高手赐教,我用mysql.  
结果是2

解决方案 »

  1.   

    是这个意思
    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
      

  2.   

    mysql> SELECT * FROM pstudy WHERE `学历`='本科' ORDER BY `取得学历时间` DESC LIMIT 1;
    +------+------+--------------+
    | 工号 | 学历 | 取得学历时间 |
    +------+------+--------------+
    |    2 | 本科 |         2001 |
    +------+------+--------------+
    1 row in set (0.02 sec)
      

  3.   

    不好意思让大家误解了,这2是count(*)的结果,不是工号是2
      

  4.   

    学历是本科的,最近的记录是2001 的这个,但是count(*) 怎么会是2??
    时间是什么考虑的?
      

  5.   

    那应该是我想那样吧,最后应该是工号是1和2的,count(*)就等于2了?哈哈
      

  6.   

    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 #TSELECT 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
      

  7.   

    已经得到解决select *  from pstudy a ,(select pstudy.gongnum,max(endtime) as time from pstudy group by gongnum) b where a.gongnum=b.gongnum and a.endtime=b.time and a.schoolage='本科'