34,597
社区成员
发帖
与我相关
我的任务
分享
order by abs(datediff(dd,@dt,C))
select *
from table1
where C=(select max(C) from table1 where C<='2008/09/09')
create table tb(A varchar(10), B decimal(18,1), C datetime, D varchar(10))
insert into tb values('001' , 1.0 , '2009/01/03' , 'aaaa')
insert into tb values('001' , 0.9 , '2008/09/03' , 'aaaa')
insert into tb values('001' , 1.1 , '2008/08/03' , 'aaaa')
insert into tb values('002' , 1.2 , '2009/01/03' , 'aaaa')
insert into tb values('002' , 0.8 , '2009/01/03' , 'aaaa')
go
select top 1 * from tb order by abs(datediff(day,c,'2008/09/09'))
drop table tb
/*
A B C D
---------- -------------------- ------------------------------------------------------ ----------
001 .9 2008-09-03 00:00:00.000 aaaa
*/
create table tb(A varchar(10), B decimal(18,1), C datetime, D varchar(10))
insert into tb values('001' , 1.0 , '2009/01/03' , 'aaaa')
insert into tb values('001' , 0.9 , '2008/09/03' , 'aaaa')
insert into tb values('001' , 1.1 , '2008/08/03' , 'aaaa')
insert into tb values('002' , 1.2 , '2009/01/03' , 'aaaa')
insert into tb values('002' , 0.8 , '2009/01/03' , 'aaaa')
insert into tb values('001' , 1.0 , '2008/09/10' , 'aaaa') --加条测试语句
go
select top 1 * from tb order by abs(datediff(day,c,'2008/09/09'))
drop table tb
/*
A B C D
---------- -------------------- ------------------------------------------------------ ----------
001 1.0 2008-09-10 00:00:00.000 aaaa
(所影响的行数为 1 行)
*/
create table tb(A varchar(10), B decimal(18,1), C datetime, D varchar(10))
insert into tb values('001' , 1.0 , '2009/01/03' , 'aaaa')
insert into tb values('001' , 0.9 , '2008/09/03' , 'aaaa')
insert into tb values('001' , 1.1 , '2008/08/03' , 'aaaa')
insert into tb values('002' , 1.2 , '2009/01/03' , 'aaaa')
insert into tb values('002' , 0.8 , '2009/01/03' , 'aaaa')
insert into tb values('002' , 1.2 , '2008/09/08' , 'aaaa') --增加测试数据
insert into tb values('002' , 0.8 , '2008/09/10' , 'aaaa') --增加测试数据
go
select * from tb where abs(datediff(day,c,'2008/09/09')) = (select min(abs(datediff(day,c,'2008/09/09'))) from tb)
drop table tb
/*
A B C D
---------- -------------------- ------------------------------------------------------ ----------
002 1.2 2008-09-08 00:00:00.000 aaaa
002 .8 2008-09-10 00:00:00.000 aaaa
(所影响的行数为 2 行)
*/
select top 1 * from tb order by abs(datediff(day,c,'2008/09/09'))
--如果只存在一条记录。
select top 1 * from tb order by abs(datediff(day,c,'2008/09/09'))
--如果存在多条记录
select * from tb where abs(datediff(day,c,'2008/09/09')) = (select top 1 * from tb order by abs(datediff(day,c,'2008/09/09')))
select top * from tb
where c<'2008/09/09'
order by c desc
if object_id('[TB]') is not null drop table [TB]
create table [TB]([A] varchar(3),[B] numeric(2,1),[C] datetime,[D] varchar(4))
insert [TB]
select '001',1.0,'2009/01/03','aaaa' union all
select '001',0.9,'2008/09/03','aaaa' union all
select '001',1.1,'2008/08/03','aaaa' union all
select '002',1.2,'2009/01/03','aaaa' union all
select '002',0.8,'2009/01/03','aaaa'
declare @dt datetime
set @dt='2008/09/09'
select top 1 * from [TB]
order by abs(datediff(dd,@dt,C))
/*
A B C D
---- ---- ------------------------------------------------------ ----
001 .9 2008-09-03 00:00:00.000 aaaa
(所影响的行数为 1 行)
*/
drop table [TB]
select top 1 * from tb order by c desc