卡号    换卡日期    姓名
-----------------------
001  2013-01-01   张三
001  2013-01-05   李四
001  2013-01-10   王五
001  2013-01-17   赵六现在从TXT里提取数据,得到卡号"001"与日期"2013-01-07",我如何查询接到这笔数据是李四的

解决方案 »

  1.   

    卡号    换卡日期    姓名
    -----------------------
    001  2013-01-01   张三
    001  2013-01-05   李四
    001  2013-01-10   王五
    001  2013-01-17   赵六现在从TXT里提取数据,得到卡号"001"与日期"2013-01-07",我如何查询接到这笔数据是李四的意思是卡号"001",日期"2013-01-07" 这笔考勤数据应该是归李四,因为卡号重复..只能从日期着手
    因为卡号一样的情况下..日期"2013-01-07" 是属于"2013-01-05" 到给王五"2013-01-10"这个范围
    所以接到这笔数据应该给李四
      

  2.   

    你要查询的话就直接:
    select * 
    from tb
    where id='0001' and 换卡日期='2013-01-05'难道你想要的不是这样?
      

  3.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-03-25 17:15:07
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
    -- Jun 17 2011 00:54:03 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
    --
    ----------------------------------------------------------------
    --> 测试数据:[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([卡号] varchar(3),[换卡日期] datetime,[姓名] varchar(4))
    insert [huang]
    select '001','2013-01-01','张三' union all
    select '001','2013-01-05','李四' union all
    select '001','2013-01-10','王五' union all
    select '001','2013-01-17','赵六'
    --------------开始查询--------------------------
    SELECT TOP 1
            *
    FROM    huang
    WHERE     [卡号] = '001' AND ABS(DATEDIFF(dd, '2013-01-07', [换卡日期])) <= ( SELECT MIN(ABS(DATEDIFF(dd,
                                                                  '2013-01-07',
                                                                  [换卡日期]))) ddiff
                                                         FROM   huang
                                                         WHERE  [卡号] = '001'
                                                       )
    ----------------结果----------------------------
    /* 
    卡号   换卡日期                    姓名
    ---- ----------------------- ----
    001  2013-01-05 00:00:00.000 李四
    */
      

  4.   

    其实你这种设计无形中加大了计算的难度,如果你再加一列为换卡结束日期,而原有的换卡日期为换卡开始日期,然后保证每一行的数据都是连续的,那么直接between and就可以了。
      

  5.   

    select * from HR_PERCARD
    where infm_date = (select MAX(infm_date) from HR_PERCARD where CARD_NO = '00956231' and infm_date <= '20130401')