日期:2014-05-18  浏览次数:20543 次

求离当前时间最近的纪录(在线等!急急急急急急!!!)
表1   M   :IN_NO         IN_DATE
                  1             20070718
                  2             20070719
                  3             20070218  
表2   N   :IN_NO         CODE           PRICE
                  1               001             1000
                  2               001             100
                  3               002             100
条件:M.IN_NO=N.IN_NO       DATEDIFF(DAY,M.IN_DATE, '20070720 ')为最小
结果:MAT_CODE       PRICE
            001                   100
            002                   100

------解决方案--------------------
create table t1(IN_NO int,IN_DATE varchar(10))
insert t1
select 1 , '20070718 '
union select 2, '20070719 '
union select 3, '20070218 '


create table t2(IN_NO int,CODE varchar(10),PRICE int)
insert t2
select 1 , '001 ',1000
union select 2, '001 ',100
union select 3, '002 ' ,100


select * from (select MAT_CODE=a.CODE,PRICE,b.IN_DATE from t1 b inner join t2 a on a.in_no=b.in_no) t
where not exists(select 1 from (select MAT_CODE=a.CODE,PRICE,b.IN_DATE from t1 b inner join t2 a on a.in_no=b.in_no) d where t.MAT_CODE=MAT_CODE and t.IN_DATE <IN_DATE)

drop table t1,t2