比如有如下表:
time           empname   proId    
2011-12-01     张三      1
2011-12-01     张三      2
2012-01-01     张三      3    
2012-01-01     张三      4  
2012-01-01     张三      5  2011-12-01     李四      1
2011-12-01     李四      2
当我输入2012-02-01的时候,查询出来的数据应该是:张三小于或等于2012-02-01最新数据为time:2012-01-01的数据,
李四则为:2011-12-01的数据。
最终查询的数据为:time           empname   proId    
2012-01-01     张三      3    
2012-01-01     张三      4  
2012-01-01     张三      5  2011-12-01     李四      1
2011-12-01     李四      2求各位前辈帮帮忙,在线等。

解决方案 »

  1.   

    select top 1 * from tb
    order by abs(datediff(d,time,@time)) asc
      

  2.   


    declare @T table (time datetime,empname varchar(4),proId int)
    insert into @T
    select '2011-12-01','张三',1 union all
    select '2011-12-01','张三',2 union all
    select '2012-01-01','张三',3 union all
    select '2012-01-01','张三',4 union all
    select '2012-01-01','张三',5 union all
    select '2011-12-01','李四',1 union all
    select '2011-12-01','李四',2declare @date varchar(10) set @date='2012-02-01'select * from @T t where abs(datediff(d,time,@date))
    =(select min(abs(datediff(d,time,@date))) from @T where empname=t.empname)
    /*
    time                    empname proId
    ----------------------- ------- -----------
    2011-12-01 00:00:00.000 李四      1
    2011-12-01 00:00:00.000 李四      2
    2012-01-01 00:00:00.000 张三      3
    2012-01-01 00:00:00.000 张三      4
    2012-01-01 00:00:00.000 张三      5
    */
      

  3.   

    --定义一个时间变量
    declare @date varchar(10) set @date='2012-02-01'select * from tb t where abs(datediff(d,time,@date))
    =(select min(abs(datediff(d,time,@date))) from tb where empname=t.empname)
      

  4.   

    你这个方法可行,谢谢maco_wang,
    select * from tb t where abs(datediff(d,time,@date))
    =(select min(abs(datediff(d,time,@date))) from tb where empname=t.empname)
    这个语句我没有看懂,我是个菜鸟,还望前辈讲解下。万分感谢
      

  5.   

    declare @T table (time datetime,empname varchar(4),proId int)
    insert into @T
    select '2011-12-01','张三',1 union all
    select '2011-12-01','张三',2 union all
    select '2012-01-01','张三',3 union all
    select '2012-01-01','张三',4 union all
    select '2012-01-01','张三',5 union all
    select '2011-12-01','李四',1 union all
    select '2011-12-01','李四',2SELECT * FROM @T A
    WHERE time = (SELECT TOP 1 time FROM @T WHERE empname = A.empname ORDER BY time DESC)/*
    time empname proId
    2012-01-01 00:00:00.000 张三 3
    2012-01-01 00:00:00.000 张三 4
    2012-01-01 00:00:00.000 张三 5
    2011-12-01 00:00:00.000 李四 1
    2011-12-01 00:00:00.000 李四 2
    */
      

  6.   


    DECLARE @EndDate DATETIME
    SET @EndDate = '2012-02-01'
    declare @T table (time datetime,empname varchar(4),proId int)
    insert into @T
    select '2011-12-01','张三',1 union all
    select '2011-12-01','张三',2 union all
    select '2012-01-01','张三',3 union all
    select '2012-01-01','张三',4 union all
    select '2012-01-01','张三',5 union all
    select '2011-12-01','李四',1 union all
    select '2011-12-01','李四',2SELECT * FROM @T A
    WHERE time = (SELECT TOP 1 time FROM @T WHERE empname = A.empname AND time <=@EndDate ORDER BY time DESC)
      

  7.   

    找出每个姓名下时间<= 输入日期,有记录的最大时间下的记录,empname = A.empname 为了针对不同的姓名找出不同的日期