现有表:
  员工考勤表(单位编号+员工编号+上班时间+...)  说明:无主键,此表在员工每日上班都会登记一次(纪录一条考勤纪录)需求:
  想按单位查该单位所有员工最后一次上班考勤时间清单,例如原始数据是:
  单位编号  员工编号 上班时间
  100001    100001   2005-01-01 08:17:15
  100001    100002   2005-01-01 08:20:10
  100001    100001   2005-01-02 08:10:24  要求的结果是: 
  单位编号  员工编号 上班时间
  100001    100001   2005-01-02 08:10:24
  100001    100002   2005-01-01 08:20:10如您回复能满足要求,会全额给分

解决方案 »

  1.   

    select 单位编号,员工编号,max(上班时间) from tab group by 单位编号,员工编号
      

  2.   

    这个还叫做挑战?? 最基本的SQL
      

  3.   

    select 单位编号,员工编号,max(上班时间) from tab group by 单位编号,员工编号
    估计问题没有写完,应该不会这么简单。
      

  4.   

    算了,只怪我没把需求说仔细。
    就是我要做一个报表,查询我的一张流水表里最后一次操作的纪录,但是要求把所有字段都列出来的。
    总不能把所有字段放到SELECT里面,然后又全放到GROUP BY里面吧,那样的话,可能每个人所有的交易纪录都会出来的,因为所有的字段组合起来,就不可能有重复的,分组也没意义了
      

  5.   

    select * 
      from 员工考勤表
     where (单位编号,员工编号,上班时间) in ( select 单位编号,员工编号,max(上班时间) 
                                                 from 员工考勤表 
                                                group by 单位编号,员工编号)
         
      

  6.   

    这样写效率会高一点:select A.* 
      from 员工考勤表 A
           join (select 单位编号,员工编号,max(上班时间) 上班时间 from tab group by 单位编号,员工编号) A1 on (A.单位编号=A1.单位编号 and A.员工编号=A1.员工编号 and A.上班时间=A1.上班时间) 
      

  7.   

    select A.* 
      from 员工考勤表 A
           join (select 单位编号,员工编号,max(上班时间) 上班时间 from 员工考勤表 group by 单位编号,员工编号) A1 on (A.单位编号=A1.单位编号 and A.员工编号=A1.员工编号 and A.上班时间=A1.上班时间)
      

  8.   

    也来凑个热闹=============================================
    to 回复人: risingsoft(一苇渡江) 
    这样没什么效率的。我用存储过程写的
    ......
    现有表:
      员工考勤表(单位编号+员工编号+上班时间+...)  说明:无主键,此表在员工每日上班都会登记一次(纪录一条考勤纪录)
    =============================================
    to回复人: xinpingf(白开心) ( ) 
    select * 
      from 员工考勤表
     where (单位编号,员工编号,上班时间) in ( select 单位编号,员工编号,max(上班时间) 
                                                 from 员工考勤表 
                                                group by 单位编号,员工编号)=============================================
    =============================================
    人家risingsoft(一苇渡江)都说了,连主键都没有,怎么可能有索引呢?所以xinpingf(白开心)算是白写了,人家可是体会不到你那sql精妙所在的~~~~~~
      

  9.   

    让大家看看我的写法,^_^select * from
      ( select a.*, rownumber() over(partition by 员工编号 order by 上班时间 desc) as row_num
        from 员工考勤表
      ) b 
    where row_num=1;是不是没见过,^_^
    邦腾科技 http://www.partner-soft.com
      

  10.   

    select * from 员工考勤表 order by 上班时间 desc having 员工编号