数据如下:工号,     日期,     时间080814     20100410    07:00
080814     20100410    07:36
080814     20100410    20:00
080814     20100411    20:00
080815     20100411    07:00
080815     20100410    09:36
080816     20100410    20:00公司员工每天有多次刷卡,我需要每个员工,每天的,第一笔,后最后一笔刷卡记录
比如工号    日期        第一笔    最后一笔
080814  20100410    07:00    20:00

解决方案 »

  1.   

    SELECT 工号, 日期 ,MIN(时间),MAX(时间) FROM TB GROUP BY 工号, 日期
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2010-04-22 14:49:43
    -- Verstion:
    --      Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86) 
    -- May 26 2009 14:24:20 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([工号] varchar(6),[日期] datetime,[时间] sql_variant)
    insert [tb]
    select '080814','20100410 07:00',null union all
    select '080814','20100410 07:36',null union all
    select '080814','20100410 20:00',null union all
    select '080814','20100411 20:00',null union all
    select '080815','20100411 07:00',null union all
    select '080815','20100410 09:36',null union all
    select '080816','20100410 20:00',null
    --------------开始查询--------------------------
    select 工号,日期,min(时间) as 第一笔,max(时间) as 最后一笔 from  tb group by 工号,日期
    ----------------结果----------------------------
    /* 工号     日期                      第一笔                                                                                                                                                                                                                                                              最后一笔
    ------ ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    080814 2010-04-10 07:00:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080814 2010-04-10 07:36:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080815 2010-04-10 09:36:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080814 2010-04-10 20:00:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080816 2010-04-10 20:00:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080815 2010-04-11 07:00:00.000 NULL                                                                                                                                                                                                                                                             NULL
    080814 2010-04-11 20:00:00.000 NULL                                                                                                                                                                                                                                                             NULL
    警告: 聚合或其他 SET 操作消除了空值。(7 行受影响)*/
      

  3.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-22 14:49:02
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --------------------------------------------------------------------------
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([a] NVARCHAR(10),[b] DATETIME,[c] NVARCHAR(10))
    INSERT [tb]
    SELECT '080814','20100410','07:00' UNION ALL
    SELECT '080814','20100410','07:36' UNION ALL
    SELECT '080814','20100410','20:00' UNION ALL
    SELECT '080814','20100411','20:00' UNION ALL
    SELECT '080815','20100411','07:00' UNION ALL
    SELECT '080815','20100410','09:36' UNION ALL
    SELECT '080816','20100410','20:00'
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select a 工号,b 日期,第一笔=MIN([c]),最后一笔=MAX(c)
    from tb 
    group by a,b
    /*
    工号         日期                      第一笔        最后一笔
    ---------- ----------------------- ---------- ----------
    080814     2010-04-10 00:00:00.000 07:00      20:00
    080815     2010-04-10 00:00:00.000 09:36      09:36
    080816     2010-04-10 00:00:00.000 20:00      20:00
    080814     2010-04-11 00:00:00.000 20:00      20:00
    080815     2010-04-11 00:00:00.000 07:00      07:00(5 行受影响)
    */
      

  4.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([工号] Datetime,[日期] Datetime,[时间] nvarchar(5))
    Insert tb
    select '080814','20100410',N'07:00' union all
    select '080814','20100410',N'07:36' union all
    select '080814','20100410',N'20:00' union all
    select '080814','20100411',N'20:00' union all
    select '080815','20100411',N'07:00' union all
    select '080815','20100410',N'09:36' union all
    select '080816','20100410',N'20:00'
    Go
    Select [工号],
           [日期],
           [第一笔]=(select top 1 [时间] 
                     from tb 
                     where [工号]=t.[工号] and [日期]=t.[日期] order by [时间]),
           [最后一笔]=(select top 1 [时间] 
                      from tb 
                      where [工号]=t.[工号] and [日期]=t.[日期] order by [时间]desc)  
    from tb t
    group by [工号],[日期]
    /*
    工号                      日期                      第一笔   最后一笔
    ----------------------- ----------------------- ----- -----
    2008-08-14 00:00:00.000 2010-04-10 00:00:00.000 07:00 20:00
    2008-08-14 00:00:00.000 2010-04-11 00:00:00.000 20:00 20:00
    2008-08-15 00:00:00.000 2010-04-10 00:00:00.000 09:36 09:36
    2008-08-15 00:00:00.000 2010-04-11 00:00:00.000 07:00 07:00
    2008-08-16 00:00:00.000 2010-04-10 00:00:00.000 20:00 20:00(5 個資料列受到影響)
    */
      

  5.   


    select 工号,日期,[第一笔] = min(时间),[最后一笔] = max(时间) from  tb group by 工号,日期
      

  6.   


    SELECT 工号, 日期 ,MIN(时间) 第一笔,MAX(时间) 最后一笔 FROM TB GROUP BY 工号, 日期
      

  7.   

    select 工号,日期,[第一笔] = min(时间),[最后一笔] = max(时间) from  tb group by 工号,日期
      

  8.   


    select 工号,日期,min(时间) 第一笔,max(时间) 最后一笔
    from tb
    group by 工号,日期
      

  9.   


    select 工号,日期,min(时间) as [第一笔],max(时间) as [最后一笔] from  tb group by 工号,日期
      

  10.   

    create table tb
    (
     P int,
     Date_Time datetime
    )
    insert into tb(P,Date_Time)
    (
      select 120,'2010-04-01 00:00:00.000' union
      select 465,'2010-04-01 00:15:00.000 ' union
      select 234,'2010-04-01 00:30:00.000' union
      select 876,'2010-04-01 00:45:00.000' union
      select 345,'2010-04-01 01:00:00.000 '
    )
    select max(P),min(P)from tb 
    group by CONVERT(varchar(8),Date_Time,112)
    go
    select * from [表名] where CONVERT(varchar(8),[列名],112)=CONVERT(varchar(8),GetDate(),112) 
    go
    数据如下:工号, 日期, 时间080814 20100410 07:00
    080814 20100410 07:36
    080814 20100410 20:00
    080814 20100411 20:00
    080815 20100411 07:00
    080815 20100410 09:36
    080816 20100410 20:00
    go
    公司员工每天有多次刷卡,我需要每个员工,每天的,第一笔,后最后一笔刷卡记录
    比如工号 日期 第一笔 最后一笔
    080814 20100410 07:00 20:00
    go
    create table tb2
    (
    id varchar(10),
    [datetime] varchar(20),
    [hour] datetime
    )
    go
    delete from tb2
    go
    insert into tb2(id,[datetime],[hour])
    (
     select '080814','20100410','07:00' union
     select '080814','20100410','07:36' union
     select '080814','20100410','20:00' union
     select '080814','20100411','20:00' union
     select '080815','20100411','07:00' union
     select '080815','20100410','09:36' union
     select '080815','20100410','20:00'
    )select * from tb2
    go
    select id,CONVERT(varchar(100),convert(datetime,[datetime],118),23),min(convert(varchar(10),[hour],108)),max(convert(varchar(10),[hour],108))
    from tb2 group by id,[datetime]
    go
      

  11.   

    SELECT 工号, 日期 ,MIN(时间),MAX(时间) FROM TB GROUP BY 工号, 日期
      

  12.   

    SELECT 工号, 日期 ,MIN(时间),MAX(时间) FROM TB GROUP BY 工号, 日期
      

  13.   

    select 工号,日期,min(时间) as [第一笔],max(时间) as [最后一笔] from  tb group by 工号,日期
      

  14.   

    --设表名为tt
    select a.*,[第一笔]=(select top 1 时间 from tt where 工号=a.工号 and 日期=a.日期 order by 时间),
    [最后一笔]=(select top 1 时间 from tt where 工号=a.工号 and 日期=a.日期 order by 时间 desc)
    (select distinct 工号,日期 from tt) as a