首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

大侠现身啊解决思路

2012-01-22 
大侠现身啊!现在我有一个表a,表a及测试数据如下:a_1a_3151502007-04-29151512007-04-25151552007-06-01151

大侠现身啊!
现在我有一个表a,表a及测试数据如下:
  a_1                   a_3
15150             2007-04-29
15151             2007-04-25
15155             2007-06-01
15160             2007-08-08
15162             2007-07-08
16150             2007-06-01
16153             2006-06-01
现在我想找出a_1字段中前4位相同,而a_3字段时间最早的那条记录的a_1字段值

谢谢了,在线等

[解决办法]
--建立测试环境
create table #tb(a_1 varchar(10),a_3 datetime)
insert #tb(a_1,a_3)
select '15150 ', '2007-04-29 ' union all
select '15151 ', '2007-04-25 ' union all
select '15155 ', '2007-06-01 ' union all
select '15160 ', '2007-08-08 ' union all
select '15162 ', '2007-07-08 ' union all
select '16150 ', '2007-06-01 ' union all
select '16153 ', '2006-06-01 '
go
--执行测试语句
select t.a_1,t.a_3 from #tb t
where not exists(select 1 from #tb where left(t.a_1,4) = left(a_1,4) and t.a_3 > a_3)
go
--删除测试环境
drop table #tb
go
/*--测试结果
a_1 a_3
---------- ------------------------------------------------------
15151 2007-04-25 00:00:00.000
15162 2007-07-08 00:00:00.000
16153 2006-06-01 00:00:00.000

(3 row(s) affected)


*/


[解决办法]
create table t
(a_1 varchar(10), a_3 varchar(10))
insert into t
select '15150 ', '2007-04-29 ' union all
select '15151 ', '2007-04-25 ' union all
select '15155 ', '2007-06-01 ' union all
select '15160 ', '2007-08-08 ' union all
select '15162 ', '2007-07-08 ' union all
select '16150 ', '2007-06-01 ' union all
select '16153 ', '2006-06-01 '


select * from t a
where not exists(select 1 from t where left(a_1,4)=left(a.a_1,4)and a_3 <a.a_3 )


a_1 a_3
---------- ----------
15151 2007-04-25
15162 2007-07-08
16153 2006-06-01

(3 row(s) affected)

热点排行