打卡记录表 : CheckCardLogLogID  uid        CheckTime
1       6     2011-01-01 17:31:55
2       6     2011-01-01 17:31:56
3       2     2011-01-01 17:33:55
4       3     2011-01-01 17:33:55
5       3     2011-01-01 17:35:21
6       3     2011-01-01 17:35:58
7       5     2011-01-01 17:39:50
8       5     2011-01-01 17:39:58下班打卡,可多次,取后一次要求查出每人(uid)下班时间

解决方案 »

  1.   


    select uid,max(CheckTime) as 下班时间 from tb group by uid
      

  2.   

    select * from tb A
    where not exits (select 1 from tb where B where A.checktime<B.checktime)
      

  3.   

    LogID uid CheckTime             Card
    1      6 2011-01-01 17:31:55    一代卡
    2      6 2011-01-01 17:31:56    一代卡
    3      2 2011-01-01 17:33:55    一代卡
    4      3 2011-01-01 17:33:55    一代卡
    5      3 2011-01-01 17:35:21    一代卡
    6      3 2011-01-01 17:35:58    一代卡
    7      5 2011-01-01 17:39:50    二代卡
    8      5 2011-01-01 17:39:58    二代卡我是要列出表里 所有的资料select uid,max(CheckTime) as 下班时间 from tb group by uid 
    这个是不行的
      

  4.   

    create table CheckCardLog(LogID int,uid int,CheckTime datetime)
    insert into CheckCardLog select 1,6,'2011-01-01 17:31:55'
    insert into CheckCardLog select 2,6,'2011-01-01 17:31:56'
    insert into CheckCardLog select 3,2,'2011-01-01 17:33:55'
    insert into CheckCardLog select 4,3,'2011-01-01 17:33:55'
    insert into CheckCardLog select 5,3,'2011-01-01 17:35:21'
    insert into CheckCardLog select 6,3,'2011-01-01 17:35:58'
    insert into CheckCardLog select 7,5,'2011-01-01 17:39:50'
    insert into CheckCardLog select 8,5,'2011-01-01 17:39:58'
    go
    select uid,max(checktime) from CheckCardLog group by uid
    go
    drop table CheckCardLog
    /*
    uid         
    ----------- -----------------------
    2           2011-01-01 17:33:55.000
    3           2011-01-01 17:35:58.000
    5           2011-01-01 17:39:58.000
    6           2011-01-01 17:31:56.000(4 行受影响)*/
      

  5.   

    -- 这样可以查询 没人每天的 下班时间
    select uid,CONVERT(varchar(100),CheckTime, 23),max(CheckTime) as 下班时间
    from tb
    group by uid,CONVERT(varchar(100),CheckTime, 23): 
      

  6.   

    create table CheckCardLog(LogID int,uid int,CheckTime datetime,Card nvarchar(5))
    insert into CheckCardLog select 1,6,'2011-01-01 17:31:55','一代卡'
    insert into CheckCardLog select 2,6,'2011-01-01 17:31:56','一代卡'
    insert into CheckCardLog select 3,2,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 4,3,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 5,3,'2011-01-01 17:35:21','一代卡'
    insert into CheckCardLog select 6,3,'2011-01-01 17:35:58','一代卡'
    insert into CheckCardLog select 7,5,'2011-01-01 17:39:50','二代卡'
    insert into CheckCardLog select 8,5,'2011-01-01 17:39:58','二代卡'
    go
    select uid,max(checktime),card from CheckCardLog group by uid,card
    go
    drop table CheckCardLog
    /*
    uid                                 card
    ----------- ----------------------- -----
    5           2011-01-01 17:39:58.000 二代卡
    2           2011-01-01 17:33:55.000 一代卡
    3           2011-01-01 17:35:58.000 一代卡
    6           2011-01-01 17:31:56.000 一代卡(4 行受影响)*/
      

  7.   

    select a.* from  CheckCardLog a,(select uid,max(CheckTime) as CheckTime from CheckCardLog group by uid) x where a.uid=x.uid and a.CheckTime = x.CheckTime
      

  8.   

    如果有多个工作日,则:
    create table CheckCardLog(LogID int,uid int,CheckTime datetime,Card nvarchar(5))
    insert into CheckCardLog select 1,6,'2011-01-01 17:31:55','一代卡'
    insert into CheckCardLog select 2,6,'2011-01-01 17:31:56','一代卡'
    insert into CheckCardLog select 3,2,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 4,3,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 5,3,'2011-01-01 17:35:21','一代卡'
    insert into CheckCardLog select 6,3,'2011-01-01 17:35:58','一代卡'
    insert into CheckCardLog select 7,5,'2011-01-01 17:39:50','二代卡'
    insert into CheckCardLog select 8,5,'2011-01-01 17:39:58','二代卡'
    insert into CheckCardLog select 9,6,'2011-01-02 17:31:55','一代卡'
    insert into CheckCardLog select 10,6,'2011-01-02 17:31:56','一代卡'
    insert into CheckCardLog select 11,2,'2011-01-02 17:33:55','一代卡'
    insert into CheckCardLog select 12,3,'2011-01-02 17:33:55','一代卡'
    insert into CheckCardLog select 13,3,'2011-01-02 17:35:21','一代卡'
    insert into CheckCardLog select 14,3,'2011-01-02 17:35:58','一代卡'
    insert into CheckCardLog select 15,5,'2011-01-02 17:39:50','二代卡'
    insert into CheckCardLog select 16,5,'2011-01-02 17:39:58','二代卡'
    go
    select * from checkcardlog a
    where not exists(select 1 from checkcardlog where uid=a.uid and checktime>a.checktime and convert(varchar(10),checktime,120)=convert(varchar(10),a.checktime,120))
    go
    drop table CheckCardLog
    /*
    LogID       uid         CheckTime               Card
    ----------- ----------- ----------------------- -----
    2           6           2011-01-01 17:31:56.000 一代卡
    3           2           2011-01-01 17:33:55.000 一代卡
    6           3           2011-01-01 17:35:58.000 一代卡
    8           5           2011-01-01 17:39:58.000 二代卡
    10          6           2011-01-02 17:31:56.000 一代卡
    11          2           2011-01-02 17:33:55.000 一代卡
    14          3           2011-01-02 17:35:58.000 一代卡
    16          5           2011-01-02 17:39:58.000 二代卡(8 行受影响)*/
      

  9.   

    要从结构设计解决,比如补卡、班次等非一SQL之力
      

  10.   

    create table CheckCardLog(LogID int,uid int,CheckTime datetime,Card nvarchar(5))
    insert into CheckCardLog select 1,6,'2011-01-01 17:31:55','一代卡'
    insert into CheckCardLog select 2,6,'2011-01-01 17:31:56','一代卡'
    insert into CheckCardLog select 3,2,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 4,3,'2011-01-01 17:33:55','一代卡'
    insert into CheckCardLog select 5,3,'2011-01-01 17:35:21','一代卡'
    insert into CheckCardLog select 6,3,'2011-01-01 17:35:58','一代卡'
    insert into CheckCardLog select 7,5,'2011-01-01 17:39:50','二代卡'
    insert into CheckCardLog select 8,5,'2011-01-01 17:39:58','二代卡'
    go
    select * from CheckCardLog A
    where not exists (select 1 from CheckCardLog B where A.uid = B.uid and A.checktime < B.checktime)
    go
    drop table CheckCardLog
      

  11.   

    哭,感谢大家,如果是这个表呢?该怎么写SQL这个表是合约表,一个客户可以有多个合约(续约),我要查询 每个客户有效的合约(取最后一次创建时间)编号   我方签约人   客户ID    开始日期   结束日期  创建日期    备注
    LogID   Uid      GuestID    StartDay  EndDay  CreateDay  Re
      

  12.   


    select uid,max(checktime),card from CheckCardLog group by uid,card
      

  13.   


    select * from tb a where LogID  in
     (select top 1 LogID from tb 
             where Uid=a.Uid and GuestID=a.GuestID order by CreateDay desc)